使用日期范围进行查询
本文关键字:查询 范围 日期 | 更新日期: 2023-09-27 18:01:09
我想知道如何在这个例子中进行查询:
我有一个用户表,它包含UserID、UserName、DateRegistered和角色。我想通过选择两个组合框进行查询,每个组合框都有:-期间注册用户(当月、上月、当前15天、最后15天、今年和去年(-角色(不同角色(
我想在网格中显示引用所选combobox
项的结果查询。例如:在过去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);
只需在每种情况下设置一个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);
根据您存储RegisterDate值的方式,您将需要注意边缘情况,因为我的示例假设所有时间段都是12:00:00 AM。