2011-07-10 88 views
0

這裏是我的分類表的結構如何用linq選擇實體類別和子類別?

Categories Table 
-------------------------------- 
ID  Name  ParentID 

1  NameOne NULL 
2  NameTwo 1 
3  NameThree 1 
4  NameFour 1 

這裏是我的ItemTable具有參考關鍵類別表

Items Table 
-------------------------------------------- 
ItemID CategoryID SubCategoryID  ItemName 
1  1   2     ItemOne 
2  1   3     ItemTwo 

我如何加入它來獲得獨特的記錄,像下面的例子中,使用LINQ到實體?

結果必須是

ItemID    CategoryName SubCategoryName   ItemName 
----------------------------------------------------------------------- 
1     NameOne  NameTwo     ItemOne 
2     NameOne  NameThree     ItemTwo 
+0

什麼是在例如獨特之處? 'Items'? – Eranga

+0

輸出應該像你可以看到從頂部的第三個表 –

+0

您的Items表中的SubCategoryID引用Categories表中的ParentID? – Tim

回答

2

我假設你正在使用的實體數據模型(.edmx文件)在你所拖動從數據庫中的所有必要的表。

我很難給你一個確切的查詢,因爲我不知道你已經命名了某些參考和模型。

希望這有助於你開始:

var q = from item in context.Items 
     select new { 
      ItemID = item.ItemID, 
      CategoryName = item.Category.Name, 
      SubCategoryName = item.SubCategory.Name, 
      ItemName = item.ItemName 
     }; 

請注意,「類別」和子類別」是由類別ID和SubCategoryId在項目表中的條目分類表引用,以便更換這對你有什麼。在您的數據模型文件命名它們。

祝你好運!

0

像這樣的東西可能會奏效取決於你有你的實體定義如何。

var results = Entities.Items.Select(i => new { ItemID = i.ID, CategoryName = i.Category.Name, SubCategoryName = i.SubCategory.Name, ItemName = i.Name }); 
0

我同意@ Mouhannad的假設:

我假設你使用的是在你所拖動的所有必要的表從數據庫中實體數據模型(.edmx文件)。

但是,如果這是不對的,那麼你可以嘗試使用加入,像這樣:

List<Item> items = someMethodToFillItems(); 
List<Category> categories = someMethodToFillCategories(); 

var q = (from item in items join 
      cat in categories on cat.Id equals item.CategoryId 
      subCat in categories on subCat.ParentId equals cat.Id 
    select new { 
     ItemID = item.ItemID, 
     CategoryName = cat.Name, 
     SubCategoryName = subCat.Name, 
     ItemName = item.ItemName 
    } 
);