小编Van*_*ice的帖子

OrderBy()。FirstOrDefault(<condition>)与Where(<condition>)。OrderBy()。FirstOrDefault()

我在C#项目中将EntitiyFramework 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))
Run Code Online (Sandbox Code Playgroud)

2。

Exams.GroupBy(x=>x.SubjectID).Select(x => x.Where(y => y.Date.Value > DateTime.Today).OrderBy(y => y.Level.NumericValue).FirstOrDefault())
Run Code Online (Sandbox Code Playgroud)

但是,第一个查询的结果与我离开订单的结果相同。第二个按预期方式工作。

当我通过Linqpad查看生成的SQL时,第一个查询中没有order by子句。

我的问题是,为什么第一个查询不能像第二个查询一样工作?我一直以为

.Where(<condition>).FirstOrDefault() == .FirstOrDefault(<condition>)
Run Code Online (Sandbox Code Playgroud)

就像已经在这里回答的那样:.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))
Run Code Online (Sandbox Code Playgroud)

即使它看起来像一个错误,我仍然不是100%确信。

sql-server linq-to-sql entity-framework-6

5
推荐指数
1
解决办法
4831
查看次数