我想在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做一个真正的子查询?
我想从链接表中获取最新日期
解决方案
博兰的回答解决了这个问题。我只需先做一个单独的事情。
from p in db.SomeTable
let o = db.SomeTableWithDate
.Where(lt => lt.SomeValue == value)
.OrderByDescending(t => t.Date)
.FirstOrDefault()
select new {p, o}
答案 0 :(得分:3)
from p in db.SomeTable
let o = db.SomeTableWithDate.Where(lt => lt.SomeValue == value)
.OrderByDescending(t => t.Date)
.FirstOrDefault()
select new {p, o}
因为您在过滤后订购,所以此查询也可能具有更好的性能。