【发布时间】:2015-07-01 13:34:44
【问题描述】:
我在 C# 项目中使用 EntityFramework 6.1.3 和 SQL Server。 我有两个基本上应该做同样的查询。
1.
Exams.GroupBy(x=>x.SubjectID).Select(x => x.OrderBy(y => y.Level.NumericValue).FirstOrDefault(y => y.Date.Value > DateTime.Today))
2.
Exams.GroupBy(x=>x.SubjectID).Select(x => x.Where(y => y.Date.Value > DateTime.Today).OrderBy(y => y.Level.NumericValue).FirstOrDefault())
但是,第一个查询的结果与我将订单离开的结果相同。 第二个按预期工作。
当我通过 Linqpad 查看生成的 SQL 时,第一个查询中没有 order by 子句。
我的问题是,为什么第一个查询不像第二个查询那样工作? 我一直以为
.Where(<condition>).FirstOrDefault() == .FirstOrDefault(<condition>)
就像这里已经回答的那样:.Where(<condition>).FirstOrDefault() vs .FirstOrDefault(<condition>)
编辑: 我又玩了一会儿,发现这两个查询产生相同的 SQL 输出。
Exams.GroupBy(x => x.SubjectID).Select(x => x.FirstOrDefault(y => y.Date.Value > DateTime.Today))
Exams.GroupBy(x => x.SubjectID).Select(x => x.OrderBy(y => y.Level.NumericValue).FirstOrDefault(y => y.Date.Value > DateTime.Today))
尽管它看起来像一个错误,但我仍然不能 100% 相信。
【问题讨论】:
-
也许您应该对已发布的答案做出反应。我想他们已经解释了这个问题。
标签: sql-server linq-to-sql entity-framework-6