4

我想在 LINQ to EF 中做一个简单的子查询

我做了这样的事情:

from p in db.SomeTable
let o = db.SomeTableWithDate
            .OrderByDescending(t => t.Date)
            .FirstOrDefault(lt => lt.SomeValue == value)
select new {p, o}

一切都编译并且 LINQ 没有抱怨,但结果是错误的。生成的 SQL 是一个 TOP 1 的 OUTER APPLY,但没有“ORDER BY”。

我也试过这个:

from p in db.SomeTable
select new {
    p, 
    o = db.SomeTableWithDate
            .OrderByDescending(t => t.Date)
            .FirstOrDefault(lt => lt.SomeValue == value)
}

但我得到相同的结果。(我更喜欢“让”,因为这样我可以使用上一个“让”查询中的变量)

所以这是我的问题:我怎样才能让 LINQ 用 orderby 做一个真正的子查询?

我想从链接表中获取最新日期

解决方案

来自boran的答案解决了它。我只需要先做一个单独的地方。

from p in db.SomeTable
let o = db.SomeTableWithDate
            .Where(lt => lt.SomeValue == value)
            .OrderByDescending(t => t.Date)
            .FirstOrDefault()
select new {p, o}
4

1 回答 1

3
 from p in db.SomeTable
 let o = db.SomeTableWithDate.Where(lt => lt.SomeValue == value)
        .OrderByDescending(t => t.Date)
        .FirstOrDefault()
 select new {p, o}

因为你是在过滤之后排序的,所以这个查询可能也会有更好的性能。

于 2013-04-16T10:38:54.973 回答