我在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%确信。