我有一个带有userdateregistered
字段的用户表,并希望显示在当前月份、上个月、当前季度、上个季度、当年和去年注册的用户(日期参考是 datetime.now)。我需要构建一个 linq 查询
例如:
2013/12/31 如果在 12 月(12)
2012/01/15 如果是第一季度(1)
2013/05/12 如果是 2012 年。
我有一个带有userdateregistered
字段的用户表,并希望显示在当前月份、上个月、当前季度、上个季度、当年和去年注册的用户(日期参考是 datetime.now)。我需要构建一个 linq 查询
例如:
2013/12/31 如果在 12 月(12)
2012/01/15 如果是第一季度(1)
2013/05/12 如果是 2012 年。
这是从当月选择所有用户的查询
DateTime startOfMonth = DateTime.Today.AddDays(1 - DateTime.Today.Day);
DateTime today = DateTime.Today;
var users =
from u in context.Users
where EntityFunctions.TruncateTime(u.UserDateRegistered) >= startOfMonth &&
EntityFunctions.TruncateTime(u.UserDateRegistered) <= today
select u;
它向您展示了按日期过滤的想法。只需计算适当的开始和结束日期。并使用EntityFunctions.TruncateTime方法仅比较日期。
实际上我已经创建了类DateRange
来保存开始和结束日期,并创建一些范围:
public class DateRange
{
public DateTime BeginDate { get; set; }
public DateTime EndDate { get; set; }
public static DateRange OfYear(int year)
{
return new DateRange
{
BeginDate = new DateTime(year, 1, 1),
EndDate = new DateTime(year, 12, 31)
};
}
public static DateRange OfMonth(int month)
{
var year = DateTime.Today.Year;
return new DateRange
{
BeginDate = new DateTime(year, month, 1),
EndDate = new DateTime(year, month, 1).AddMonths(1).AddDays(-1)
};
}
}
它将允许您轻松创建过滤器范围:
var range = DateRange.OfMonth(10);
var users =
from u in context.Users
where EntityFunctions.TruncateTime(u.UserDateRegistered) >= range.BeginDate &&
EntityFunctions.TruncateTime(u.UserDateRegistered) <= range.EndDate
select u;