2011-03-11 105 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