C# 如何使用linq按entity.id查找匹配实体的最大日期

C# 如何使用linq按entity.id查找匹配实体的最大日期,c#,linq,linq-to-entities,entity-framework-5,C#,Linq,Linq To Entities,Entity Framework 5,如何使用linq查找最后一个cat状态,以便使用MVC4、ef5和linq匹配cat ID 示例当前无法正常工作b/c max不允许仅使用日期时间整数、十二月等。。。我必须将它分解为一个日期时间的每个部分,比如年、月、日、小时、分、秒、毫秒等,最多7到8次检查。。。但我正在寻找一种比这更好的方法: cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catstatus.id).Where(catsta

如何使用linq查找最后一个cat状态,以便使用MVC4、ef5和linq匹配cat ID

示例当前无法正常工作b/c max不允许仅使用日期时间整数、十二月等。。。我必须将它分解为一个日期时间的每个部分,比如年、月、日、小时、分、秒、毫秒等,最多7到8次检查。。。但我正在寻找一种比这更好的方法:

cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catstatus.id).Where(catstatus => catstatus.date == (dbCat.CatStatuses.Max(catstatus.date)));
在linq、MVC4和实体框架中是否有更好更有效的方法来实现这一点?我试图使用func语句使其更好地工作

Cat状态可能类似于: “躺下”、“起来”、“咆哮”、“喵喵”、“抓主人”、“爬”、“吃饭”、“抓老鼠”

Cat status date是状态发生的日期和时间

我的问题是如何在ef5环境中使用linq以最有效的方式在最大cat状态日期之前获取最后一个cat状态?

尝试:

dbCat.CatStatuses.OrderBy(x => x.date).Last();

Jonni的建议很好,但是,您应该减少选择的数据,如下所示:

dbCat.CatStatuses =
    dbCat.CatStatuses.Where(cs => cs.id == catStatusId)
        .OrderByDescending(cs => cs.Date)
        .Select(cs => cs.status)
        .FirstOrDefault();
这大致相当于:

select top(1)
    status
from DbCat.dbo.CatStatuses cs
where cs.id == @catStatusId
order by cs.Date desc
或者更像:

select top(1)
    status
    from
    (
        select status, date
        from DbCat.dbo.CatStatuses cs
        where cs.id == @catStatusId
        order by cs.date desc
    ) x

如果你有正确的索引,这是有效的。

不确定这是否是最快的。
select top(1)
    status
    from
    (
        select status, date
        from DbCat.dbo.CatStatuses cs
        where cs.id == @catStatusId
        order by cs.date desc
    ) x