2

如何使用 linq 查找使用 mvc 4、ef5 和 linq 匹配的猫 ID 的最后猫状态?

示例当前无法正常工作 b/c max 不允许仅用于日期时间 ints、dec 等...我必须将其分解为日期时间的每个部分至少 7 或 8 次最大检查,例如年、月、日、小时、分钟、秒、毫秒等……但我正在寻找比这更好的方法:

cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catstatus.id).Where(catstatus => catstatus.date == (dbCat.CatStatuses.Max(catstatus.date)));

在 linq、mvc 4 和实体框架中是否有更好更有效的方法来执行此操作?我试图使用 func 语句来使这项工作更好。

猫的状态可能是:“躺下”、“起来”、“咆哮”、“喵喵”、“抓挠大师”、“爬”、“吃饭”、“抓老鼠”

猫状态日期是状态发生的日期和时间。

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

4

3 回答 3

4

尝试:

dbCat.CatStatuses.OrderBy(x => x.date).Last();
于 2013-07-22T18:52:26.880 回答
1
//where the variable catStatusId contains the value of the id you want.
cat.CatStatuses = dbCat.CatStatuses.Where(catstatus => catstatus.id == catStatusId).OrderByDescending(catstatus=>catstatus.Date).FirstOrDefault();
于 2013-07-22T18:57:01.660 回答
0

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

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

于 2014-06-22T19:09:08.100 回答