C# 查询日期范围

C# 查询日期范围,c#,asp.net,.net,linq,entity-framework,C#,Asp.net,.net,Linq,Entity Framework,我想知道如何在本例中继续进行查询: 我有一个用户表,其中包含UserID、UserName、DateRegistered和角色。 我想通过选择两个组合框进行查询,每个组合都有: -期间注册用户(当月、上月、当前15天、最近15天、今年和去年) -角色(不同的角色) 我想在网格中显示引用所选组合框项的结果查询。 例如:在过去15天内向状态管理员注册的用户 我知道怎么做,但我想做一些一般性的事情,而不是根据时间段做那么多的查询。 我使用EntityFramework 这不是代码,只是我想它应该是的一

我想知道如何在本例中继续进行查询:

我有一个用户表,其中包含UserID、UserName、DateRegistered和角色。 我想通过选择两个组合框进行查询,每个组合都有: -期间注册用户(当月、上月、当前15天、最近15天、今年和去年) -角色(不同的角色)

我想在网格中显示引用所选
组合框
项的结果查询。 例如:在过去15天内向状态管理员注册的用户

我知道怎么做,但我想做一些一般性的事情,而不是根据时间段做那么多的查询。 我使用EntityFramework

这不是代码,只是我想它应该是的一个例子,因为我不知道转换周期和如何比较,如果不是当前的最后15天

    string period = dropDownList.SelectedValue.ToString();
    DateTime StarPeriode= new DateTime();
    switch (option.ToUpper())
    {
        case "0":
            // CURRENT 15 days
            StarPeriode = DateTime.Now.Subtract(-15);
            break;
        case "1":
            // LAST 15 days
            StarPeriode = DateTime.Now.Subtract(-30);
            break;
        case "2":
            // CURRENT MONTH
            break;
        case "3":
            // LAST MONTH
            break;
        case "4":
            // CURRENT YEAR
            break;
        case "5":
            // LAST YEAR
            break;
        default:
            break;
    }



    var _db = new Project.Models.UserContext();
    IQueryable<User> query = _db.User.GetUser;

    query = query.Where(p => p.User.RegisterDate <= StarPeriode ||        p.User.RegisterDate>DateTime.Now);
string period=dropDownList.SelectedValue.ToString();
DateTime StarPeriode=新的日期时间();
开关(option.ToUpper())
{
案例“0”:
//当前15天
StarPeriode=DateTime.Now.Subtract(-15);
打破
案例“1”:
//过去15天
StarPeriode=DateTime.Now.Subtract(-30);
打破
案例“2”:
//当月
打破
案例“3”:
//上个月
打破
案例“4”:
//本年度
打破
案例“5”:
//去年
打破
违约:
打破
}
var_db=new Project.Models.UserContext();
IQueryable query=\u db.User.GetUser;
query=query.Where(p=>p.User.RegisterDate DateTime.Now);

只需在每种情况下设置startDate和endDate变量,然后在
LINQ
语句中使用相同的where子句

var startDate = DateTime.Today;
var endDate = DateTime.Today;
var now = DateTime.Today;

switch (option.ToUpper())
{
    case "0":
        // CURRENT 15 days
        startDate = now.AddDays(-15);
        endDate = now;
        break;
    case "1":
        // LAST 30 days
        startDate = now.AddDays(-30);
        endDate = now;
        break;
    case "2":
        // CURRENT MONTH
        startDate = new DateTime(now.Year, now.Month, 1);
        endDate = new DateTime(now.Year, now.Month, DateTime.DaysInMonth(now.Year, now.Month));
        break;
    case "3":
        // LAST MONTH
        var lastMonth = now.AddMonths(-1);
        startDate = new DateTime(lastMonth.Year, lastMonth.Month, 1);
        endDate = new DateTime(lastMonth.Year, lastMonth.Month, DateTime.DaysInMonth(lastMonth.Year, lastMonth.Month));
        break;
    case "4":
        // CURRENT YEAR
        startDate = new DateTime(now.Year, 1, 1);
        endDate = new  DateTime(now.Year, 12, 31);
        break;
    case "5":
        // LAST YEAR
        var lastYear = now.AddYears(-1);
        startDate = new DateTime(lastYear.Year, 1, 1);
        endDate = new  DateTime(lastYear.Year, 12, 31);
        break;
    default:
        break;
}

var users = Users.Where(u => u.RegisterDate >= startDate && u.RegisterDate <= endDate);
var startDate=DateTime.Today;
var endDate=DateTime.Today;
var now=DateTime.Today;
开关(option.ToUpper())
{
案例“0”:
//当前15天
startDate=now.AddDays(-15);
endDate=现在;
打破
案例“1”:
//过去30天
startDate=now.AddDays(-30);
endDate=现在;
打破
案例“2”:
//当月
startDate=新日期时间(现在.年,现在.月,1);
endDate=新的日期时间(now.Year,now.Month,DateTime.DaysInMonth(now.Year,now.Month));
打破
案例“3”:
//上个月
var lastmount=now.AddMonths(-1);
startDate=新日期时间(lastMonth.Year,lastMonth.Month,1);
endDate=新的日期时间(lastMonth.Year,lastMonth.Month,DateTime.DaysInMonth(lastMonth.Year,lastMonth.Month));
打破
案例“4”:
//本年度
startDate=新的日期时间(now.Year,1,1);
endDate=新的日期时间(now.Year,12,31);
打破
案例“5”:
//去年
var lastYear=now.AddYears(-1);
startDate=新日期时间(lastYear.Year,1,1);
endDate=新的日期时间(lastYear.Year,12,31);
打破
违约:
打破
}

var users=users.Where(u=>u.RegisterDate>=startDate&&u.RegisterDate)首先显示您迄今为止所做的一些代码。谢谢您的提示。所有这些过滤器类别都可以重新格式化为开始和结束日期。我认为角色必须使用不同的表(只是一个建议)用户表只是一个例子。我只是对如何使用句点构建linq查询有一些疑问,因为它可以是当前15天、之前15天、当前月、上个月、当前年和去年。是的,你是对的!!!谢谢!如果我想检查当前季度和上个季度呢???对于当前季度startDate=new DateTime(now.Year,((now.Month-1)/3)*3)+1,1;endDate=startDate.AddMonths(3).AddDays(-1);上一季度的startDate将仅为本季度的startDate减去3个月,并且endDate将是相同的公式。请记住,如果您发现一个答案有用,请将其向上投票或将其标记为答案。