Tas*_*key 1 c# sql-server entity-framework-core
我有一个简单的查询:
var fruits = from fruit in db.Fruits
where fruit.Name = "Apple"
select fruit;
Run Code Online (Sandbox Code Playgroud)
这很好用.这也有效:
var fruits = from fruit in db.Fruits.Include(props => props.RelatedFruits)
where fruit.Name = "Apple"
select fruit;
Run Code Online (Sandbox Code Playgroud)
但是,这并不能正常工作:
var fruits = from fruit in db.Fruits
where fruit.Name = "Apple"
select fruit;
if (includeRelated)
fruits.Include(props => props.RelatedFruits);
Run Code Online (Sandbox Code Playgroud)
RelatedFruits
总是为空,而如果我.Include()
在初始查询中包含它,则会正确填充它.
我认为这应该可以正常工作,因为它.Include()
在实际调用之前将查询添加到查询中.
这是Entity Framework Core中的一个错误,还是我误解了这种方式.Include()
?
问题是只做这个:
if (includeRelated)
fruits.Include(props => props.RelatedFruits);
Run Code Online (Sandbox Code Playgroud)
你基本上告诉EF忘记那个配置.如果你将它的返回值赋给你的fruits
变量它应该工作正常:
if (includeRelated)
fruits = fruits.Include(props => props.RelatedFruits);
Run Code Online (Sandbox Code Playgroud)
一旦您考虑LINQ转换器如何解释查询,这就变得很明显了.EF支持的LINQ扩展由其查询提供程序提供支持,该提供程序将调整查询所执行的行为或语句等.通过不将结果分配给原始(或新)变量,fruits
变量将挂起到进入if
分支之前的相同表达式树,实质上导致忽略此配置指令.
归档时间: |
|
查看次数: |
111 次 |
最近记录: |