linq - .Include() 在 linq 语句中的位置?

标签 linq entity-framework lazy-loading

在下面的查询中,在 where 之前或之后包含 include 之间是否存在任何差异。 如果它们相同,是否有首选?

DBContext.Items.Where(i => i.ItemCategory == "A")
               .Include(c = c.ItemCategories)
               .Include(g = g.ItemGroups).ToList();

对比

DBContext.Items.Include(c = c.ItemCategories)
               .Include(g = g.ItemGroups)
               .Where(i => i.ItemCategory == "A")
               .ToList();

最佳答案

没有区别。

原因是您正在创建一个表达式,它在枚举 表达式时执行。

在您的情况下,它在调用 ToList 时被枚举。

底层提供者,在本例中为 Entity Framework LINQ 提供者,将获取表达式并找出它需要提供的 SQL。由于 LINQ 提供程序控制着它的执行,它可以使用表达式并以任何需要的顺序查看它,以便正确地对底层 SQL 数据存储执行查询。

关于linq - .Include() 在 linq 语句中的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908870/

相关文章:

dynamicquery - 以 System.Linq.Dynamic 的方式动态调用 SelectMany

c# - LINQ 性能与 Dictionary<K,V>

c# - Entity Framework (数据库优先)对同一表命名约定控制的多重关系

ios - Swift - 为什么不能轻松地将惰性属性设置为只读

c# - 在 LINQ 查询中只选择几列

c# - 使用 AsOrdered c# 时设置 DegreeofParallelism

c# - EF ef Database.SqlQuery 内部回滚到已执行的存储过程

c# - Linq 方法有问题

Angular 延迟加载模块和共享模型类

c# - Entity Framework 中的异步查询和延迟加载