【问题标题】:LINQ orderby in subquery子查询中的 LINQ orderby
【发布时间】:2013-04-16 10:01:00
【问题描述】:

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

【问题讨论】:

  • @boran,我认为是外键。
  • 生成的SQL是什么?

标签: c# linq entity-framework


【解决方案1】:
 from p in db.SomeTable
 let o = db.SomeTableWithDate.Where(lt => lt.SomeValue == value)
        .OrderByDescending(t => t.Date)
        .FirstOrDefault()
 select new {p, o}

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

【讨论】:

  • Take 返回IEnumerable<T> 即使您使用1 作为参数调用它,所以即使它有效(我不确定)结果会有点不同预期:o 将是 IEnumerable<T> 而不仅仅是 T
  • 谢谢。使用单独的解决问题的地方(不需要采取)
猜你喜欢
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-17
  • 2018-03-31
  • 1970-01-01
  • 2020-04-20
  • 1970-01-01
相关资源
最近更新 更多