我有一个简单的查询:
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/