c# - 包含在创建查询后不起作用

标签 c# sql-server entity-framework-core

我有一个简单的查询:

var fruits = from fruit in db.Fruits
             where fruit.Name = "Apple"
             select fruit;

这很好用。这也有效:

var fruits = from fruit in db.Fruits.Include(props => props.RelatedFruits)
             where fruit.Name = "Apple"
             select fruit;

但是,这有效:

var fruits = from fruit in db.Fruits
             where fruit.Name = "Apple"
             select fruit;

if (includeRelated)
    fruits.Include(props => props.RelatedFruits);

RelatedFruits 始终为空,而如果我在初始查询中包含 .Include(),则会正确填充它。

我的印象是这应该可以正常工作,因为它在实际调用之前将 .Include() 添加到查询中。

这是 Entity Framework Core 中的错误,还是我误解了 .Include() 的工作方式?

最佳答案

问题是只做这个:

if (includeRelated)
  fruits.Include(props => props.RelatedFruits);

您实际上是在告诉 EF 忘记该配置。如果您将它的返回值分配给您的 fruits 变量,它应该可以正常工作:

if (includeRelated)
  fruits = fruits.Include(props => props.RelatedFruits);

一旦您考虑了 LINQ 翻译器如何解释查询,这一点就变得很明显了。 EF 支持的 LINQ 扩展由其查询提供程序提供支持,该提供程序将调整您的查询生成的行为或语句等。通过不将结果分配给原始(或新的)变量,fruits 变量将卡在进入 if 分支之前的同一表达式树上,本质上导致此配置指令被忽略。

关于c# - 包含在创建查询后不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48228332/

相关文章:

c# - 无法连接到 Oracle 数据库

sql-server - 当 DBNETLIB ConnectionWrite 一般网络错误导致 ADO 连接在 Delphi 应用程序中脱机时自动恢复?

c# - Entity Framework 7 : when db. 需要 Entity.Update(x)?

c# - 带有用户输入验证的 KeyDown 事件

c# - 使线程将异常传播到上层线程

c# - asp.net Ado 存储过程字段

sql - 动态更改别名

SQL-如何选择两列中具有相同值的不同行

c# - .Net Core Web API 方法是否与 EF Core 查询异步

c# - 为 OwnesOne 导航属性创建索引