2011-03-11 100 views
0

我有这个数据库结构image of structure 我想加载一个Product_Attributes的列表,并包含Product_AttributeItems为单个产品。Linq to Entity“In”多重关系查询?

因此,Product_Attributes通过Product_AttributeMap映射,然后单个Product_AttributeItems也被映射。

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

我一直在使用不同的联接语句试过了,但更多的Product_Attrubutes与每个仅包括一名Product_AttributeItem

名单总是碰得因此而不是3个Product_Attributes(尺寸,颜色,款式)的;包含项目(S,M,L),包含(黑色,白色)的颜色属性的大小属性;包含(US)的样式属性。我最终将得到3个Size属性,每个属性包含1个大小,2个颜色属性包含每个颜色1个样式属性(如果有意义的话)。

EDIT @Daniel Hilgarth

的代码是类似于在5个Product_Attributes而不是存在的3(尺码,颜色,样式)

的列表这

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(); 

结果

编辑@ Botz3000

回到顶部另一个方向

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

我结束了我需要的数据,但只是格式错误。因为我需要它作为包含其Product_AttributeItems(用于选项)的Product_Attributes(每个下拉列表)的列表

+0

请张贴你试过的代码,我们可以改进它。 – 2011-03-11 14:13:29

+0

更新了我的问题 – 2011-03-11 14:58:18

回答

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 
+0

请参阅上面的编辑。 – 2011-03-11 15:10:20

+0

编辑我的答案。 – Botz3000 2011-03-14 07:09:16