如何查询linq检查日期是月、季度还是年

本文关键字:季度 日期 检查 何查询 查询 linq | 更新日期: 2023-09-27 18:01:12

我有一个带有userdateregistered字段的User表,希望显示在当月、上月、本季度、上一季度、本年度和去年注册的User(日期引用为datetime.now(。我需要构建一个linq查询

例如:

2013/12/31如果在12月(12(

2012/01/15如果是在第一季度(1(

2013/05/12如果在2012年。

如何查询linq检查日期是月、季度还是年

以下是从当月中选择所有用户的查询

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;