如何在 LINQ 中按月将这些项目分组在一起

本文关键字:项目 在一起 LINQ | 更新日期: 2023-09-27 18:31:03

我有一个从数据库中提取数据的查询。 它按检查日期对项目进行分组。 我需要将标准日期时间的CheckDate转换为月份,以便按月份分组,没有其他日期。 我不知道该怎么做。

var query = from ech in this.dbContext.EmployeeCheckHistories
                    where ech.CompanyID == GlobalVariables.CompanyID &&
                    ech.Employees.ClientID == GlobalVariables.Client
                    group ech by ech.CheckDate into echG
                    orderby echG.Key descending
                    select echG;

如何在 LINQ 中按月将这些项目分组在一起

我需要将标准日期时间的检查日期转换为月份

如果它真的是一个DateTime,那么这应该可以解决问题。 只需按 CheckDate 上的月份属性分组即可。

var query = from ech in this.dbContext.EmployeeCheckHistories
            where ech.CompanyID == GlobalVariables.CompanyID &&
                  ech.Employees.ClientID == GlobalVariables.Client
            group ech by ech.CheckDate.Month into echG
            orderby echG.Key descending
            select echG;

如果它实际上是一个Nullable<DateTime>,那么您需要检查该值是否存在,如果存在,则按月分组。

var query = from ech in this.dbContext.EmployeeCheckHistories
            where ech.CompanyID == GlobalVariables.CompanyID &&
                  ech.Employees.ClientID == GlobalVariables.Client &&
                  ech.CheckDate.HasValue
            group ech by ech.CheckDate.Value.Month into echG
            orderby echG.Key descending
            select echG;

您的查询-

var query = from ech in this.dbContext.EmployeeCheckHistories
                    where ech.CompanyID == GlobalVariables.CompanyID &&
                    ech.Employees.ClientID == GlobalVariables.Client
                    group ech by ech.CheckDate into echG
                    orderby echG.Key descending
                    select echG;

可以简化为-

var query = this.dbContext.EmployeeCheckHistories.Where(c=> 
     c.CompanyID == GlobalVariable.CompanyID 
     && c.Employees.ClientID == GlobalVariables.ClientID).GroupBy(d=> d.CheckDate.Month);