Linq to Entity“In”查询具有多个关系?

时间:2011-03-11 14:01:22

标签: c# entity

我有这个数据库结构image of structure 我正在尝试加载Product_Attributes的列表,并为单个产品包含Product_AttributeItems。

所以Product_Attributes通过Product_AttributeMap映射,然后映射单个Product_AttributeItems。

我无法理解它!我猜它应该是某种IN语句,即选择它们在映射表中存在的项目。

我尝试过使用各种连接语句,但总是在列表中有更多的Product_Attrubutes,每个只包含一个Product_AttributeItem

所以不要有3个Product_Attributes(Size,Color,Style);包含Items(S,M,L)的Size属性,Color属性包含(Black,White);包含(美国)的样式属性。我最终会得到3个Size属性,每个属性包含1个大小,2个颜色属性,每个属性包含1个颜色和1个样式attibute(如果有意义的话)。

编辑@Daniel Hilgarth

代码与此类似

List<Product_Attribute> attributes = 
(from a in     _db.Product_Attribute.Include("Product_AttributeItem")
join item in _db.Product_AttributeItem on a.AttributeId equals item.AttributeId
join aim in _db.Product_AttributeItemMap on item.AttributeItemId equals
aim.AttributeItemId where item.AttributeId == a.AttributeId
select a).ToList();

产生5个Product_Attributes的列表,而不是存在的3个(大小,颜色,样式)

EDIT @ Botz3000

朝另一个方向发展

List<Product_AttributeItems> attributeItems =  
( from aim in   _db.Product_AttributeItemMap.Include("Product_AttributeItem.Product_Attribute") 
where aim.ProductId == prodId 
select aim).ToList();

我最终得到了我需要的数据,但格式错误。因为我需要它作为Product_Attributes的列表(每个下拉列表)包含他们的Product_AttributeItems(用于选项)

1 个答案:

答案 0 :(得分:1)

对我来说,这听起来像是在向错误的方向询问。

您可以选择产品的AttributeItems和产品的Attributes,然后加入这两者。

像这样的东西(可能不完全像这样,只是一般的想法):

from item in Product.AttributeItemMaps.Select(m => m.AttributeItem)
join attMap in Product.AttributeMaps on item.AttributeId equals attMap.AttributeId
orderby attMap.Order
select new { Name=attMap.Attribute.AttributeName, Value=item.AttributeItemName }

如果您需要每个属性的可用选项,可以试试这个:

from att in Product.AttributeMap.Select(m => m.Attribute).Include("AttributeItems")
select att