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

时间:2015-11-19 22:39:07

标签: c# entity-framework linq linq-to-sql

我正在使用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();

..好奇。

谢谢!

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

在@ThomasLevesque中回答他们在功能上是等同的。

更多,EF将它们转换为相同的表达式树(where表达式和Join / UnionAll - 在这种情况下只有一个Join - 表达式来解决Include)。
因此,单个EF提供程序始终返回相同的查询。