查询创建后包括不起作用

时间:2018-01-12 14:32:06

标签: 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()的工作方式?

1 个答案:

答案 0 :(得分:6)

问题在于只做这个:

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

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

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

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