gpt4 book ai didi

.net - Entity Framework 包括 Where 和 3 个表

转载 作者:行者123 更新时间:2023-12-04 22:26:04 25 4
gpt4 key购买 nike

我试图从一个基表中包含两个表,并在第二个表上提供一个“where”语句,但我遇到了一个非常令人困惑的错误(如下)。关于问题/解决方案的任何想法?

ObjectQuery<STATE> productQuery = 
LeadsContext.STATE.Include("REGION")
.Where("it.REGION.BRAND.BRAND_ID = @brand", new ObjectParameter("brand", brand))
.OrderBy("it.STATE_ABBV");

基本表格布局:州 ------ 地区 ------ 品牌

BRAND_ID 在 BRAND 中

'BRAND' is not a member of 'Transient.collection[Citizens.Leads.Data.REGION(Nullable=True,DefaultValue=)]'. To extract properties out of collections, you must use a sub-query to iterate over the collection., near multipart identifier, line 8, column 1.

最佳答案

听起来好像 State.REGION 实际上是 Region 实体的集合。

在这种情况下,您不能像那样直接访问 BRAND 导航,因为您的语句尝试访问集合的 BRAND 属性,而不是集合中元素的 BRAND 属性。

如果您使用 LINQ to Entities 而不是查询构建器方法编写此查询,您可以这样做:

var productQuery = from s in LeadsContext.State
from r in s.REGION
where r.Brand.Brand_ID == brand
orderby s.STATE_ABBR
select s;

当然,这不会急切地加载 REGION(s) 所以你可能认为你可以这样写:
var productQuery = from s in LeadsContext.State.Include("REGION")
from r in s.REGION
where r.Brand.Brand_ID == brand
orderby s.STATE_ABBR
select s;

但这不起作用,因为当您执行 Select Many(即 from y in z from x in y )时,您的 INCLUDE 丢失了。

所以你必须像这样在最后做 Include :
var productQuery = (from s in LeadsContext.State
from r in s.REGION
where r.Brand.Brand_ID == brand
orderby s.STATE_ABBR
select s) as ObjectQuery<State>).Include("REGION");

有关此解决方法的更多信息,请参阅 tip 22

我不是 100% 确定我们的查询构建器方法,即 Where(string),是否支持子选择,这是必需的。

所以我不确定那里的语法是什么。

无论如何,我希望这会有所帮助

亚历克斯

关于.net - Entity Framework 包括 Where 和 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1511626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com