Linq:选择每组的最新记录

Ric*_*cky 4 linq entity-framework-6

我想使用 Linq 从 SQL Server 表中获取每个组的最新记录。

表示例:

原始数据

我想得到这个结果:

期望的结果

我的 Linq 查询为每个公司返回一条记录,但不返回最新的记录:

var query = from p in db.Payments
            where p.Status == false 
            && DateTime.Compare(DateTime.Now, p.NextPaymentDate.Value) == 1
            group p by p.CompanyID into op                                          
            select op.OrderByDescending(nd => nd.NextPaymentDate.Value).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?为什么 NextPaymentDate 的排序不正确?

!!更新!! 我的查询正在按预期工作。在分析了 @Gilang 和 @JonSkeet 评论后,我进行了进一步的测试,发现由于没有更新的列,我没有得到预期的结果。

Gil*_*ang 6

 var query = from p in db.Payments
             where p.Status == false
             group p by p.CompanyID into op
             select new { 
                 CompanyID = op.Key,
                 NextPaymentDate = op.Max(x => x.NextPaymentDate), 
                 Status = false
             };
Run Code Online (Sandbox Code Playgroud)

您的查询未正确排序的原因是您的查询未进行正确的分组。您已按 CompanyID 正确分组,但随后您必须通过调用聚合函数来检索最大 NextPaymentDate。

Status 可以指定为 false,因为它已被早期子句中的Where 子句过滤。