我希望在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)
}
但是我得到了相同的结果。(我更喜欢“let”,因为然后我可以使用上一个“let”查询中的变量)
所以这是我的问题:如何让LINQ进行带有orderby的真正子查询?
我想从链接表中获取最新日期
解决方案
来自博伦的答案解决了它。我只需要先做一个单独的where。
from p in db.SomeTable
let o = db.SomeTableWithDate
.Where(lt => lt.SomeValue == value)
.OrderByDescending(t => t.Date)
.FirstOrDefault()
select new {p, o}