所以我使用EF,我有以下实体:
Website
Sector
Product
Attribute
AttributeTag
关系如下:
我需要检索一些与表没有直接关联的东西。例如,需要Sector
对象的产品才能使用Products
等内容检索特定的sector.Products
。
但是如果我需要检索给定Products
下的所有Website
而不是它的父Sector
怎么办?
在我的具体情况下,我的问题是:
1)如何检索给定特定website_id
的所有产品 - (忽略该部门)
2)如何检索具有特定tag_id
+ website_id
的所有产品。 (还检索相应的Attribute
)
帮助表示赞赏。谢谢!
答案 0 :(得分:2)
假设您有两个侧面导航属性:
您将在产品实体中拥有List<Sector> SectorList
。
您将在Sector Entity中拥有List<Product> ProductList
。
(sectors_products
不会作为实体出现,因为在对象世界中不需要它。)
您将在Sector Entity
中拥有Website Website
您将在产品实体中拥有List<AttributeTag> AttributeTagList
;
(products_tags
不会作为实体出现,因为在对象世界中不需要它。)
1)类似于:
var result = ProductEntities
.Where(p => p.SectorList
.Any(s => s.WebSite.Id == <your_website_id>)
);
2)像(以1为基础查询)
之类的东西result = result
.Where(p => p.AttributeTagList
.Any(at => at.Id == <your_tag_id>)
);
或全部在一个
var result = ProductEntitites
.Where(p =>
p.SectorList.Any(s => s.WebSite.Id == <your_website_id>) &&
p.AttributeTagList.Any(at => at.Id == <your_tag_id>)
);
答案 1 :(得分:1)
架构中的关系形成了一条路径。如果你想弄清楚两个实体集之间的关系,你必须遵循该途径并查询其间的所有实体。
var part1 = (from w in Websites
from s in Sectors
from p in s.Products
where s.Website equals w
&& w.website_id equals web_id
select p).Distinct();
var part2 = from p in part1
let attr = p.Attributes.Where(a => a.tag_id + web_id == target_val)
where attr.Any()
select new { p, attr };
如果我正确理解您的架构,那么应该下拉数据以回答问题的两个部分。