.net 使用Entity Framework 6返回具有最大列值的记录

edqdpe6u  于 2023-01-10  发布在  .NET
关注(0)|答案(2)|浏览(139)

尝试为ReceivedDateTime列获取具有max***datetime***值的记录,但数据集应通过某个Id列(不唯一)进行预筛选。解决方法如下:

using (var db = new SystemEntities())
{
    var records = db.Table.Where(p => p.Id == Id);
    var record = records.Where(p => p.ReceivedDateTime == records.Max(r => r.ReceivedDateTime)).FirstOrDefault();
    if(record != null)
    {

    }
}

有没有更漂亮、更简单、更短的实现、表示法?谢谢!

sirbozc5

sirbozc51#

可以使用OrderByDescending进行如下简化:

using (var db = new SystemEntities())
{
    var record = db.Table.Where(p => p.Id == Id).OrderByDescending(x => x.ReceivedDateTime).FirstOrDefault();
    if(record != null){}
}
agxfikkp

agxfikkp2#

    • 更新**

在我打开问题和尝试结果之间,原来的答案已经被修复。我很抱歉在我发布之前没有检查。

    • 更新**

既然我不能发表评论,我会在旁边贴一个答案。
上面建议的var record = db.Table.Where(p => p.Id == Id).Max(x => x.ReceivedDateTime).FirstOrDefault()将不会编译,因为Max将为您返回一个日期时间。
您可以像在SQL语句中那样使用OrderByDescending来执行此操作

// I used an in memory array but it should be the same.
var item = items.Where(x => x.Id == 2).OrderByDescending(x => x.ReceivedDate).FirstOrDefault();

相关问题