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 评论后,我进行了进一步的测试,发现由于没有更新的列,我没有得到预期的结果。
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 子句过滤。