这两个 LINQ 表达式有什么区别?

What is the difference between these two LINQ expressions?

我正在对 dbcontext / EF 进行一些乱七八糟的操作,并且两者都可以满足我的需要。这些实际上是等价的吗?有什么有趣的地方需要考虑吗?

//Something
var user = dbContext.Set<User>()
.Include(u => u.Preferences).FirstOrDefault(u => u.Id == userID);


//Something else
var user = dbContext.Set<User>().Where(u => u.Id == userID)
.Include(u => u.Preferences).FirstOrDefault();

..只是好奇。

谢谢!

它们在功能上是等价的,并且应该导致对数据库执行相同的 SQL 查询(当然,取决于 Linq 提供程序的实现方式)。

就像@ThomasLevesque 的回答一样,它们在功能上是等价的。

此外,EF 在同一个表达式树中翻译它们(一个 where 表达式和一个 Join/UnionAll - 在这种情况下只有一个 Join - 表达式来解决 Include)。
因此,单个 EF 提供程序 returns 总是相同的查询。