我有这个数据库结构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(用于选项)
答案 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