LINQ orderby在子查询中

时间:2013-04-16 10:01:00

标签: c# linq entity-framework

我想在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}

1 个答案:

答案 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}

因为您在过滤后订购,所以此查询也可能具有更好的性能。