这两个 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 总是相同的查询。
我正在对 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 总是相同的查询。