2011-07-10 6 views
0

は、ここに私のCategoriesテーブルの構造linqでエンティティのカテゴリとサブカテゴリを選択するにはどうすればいいですか?ここ

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

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

は、カテゴリテーブルへの参照キー私が使用して、それが下の例のようなユニークなレコードを取得するために参加することができますどのように

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

を持っている私のItemTableですエンティティへのLINQ?

結果は、私はあなたがデータベースから必要なすべてのテーブルをドラッグしたエンティティデータモデル(.edmxファイル)を使用していると仮定してい

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

例ではユニークである何? 「アイテム」? – Eranga

+0

出力は、アイテム内で、上から3番目のテーブルのようになります。 –

+0

ItemsテーブルのSubCategoryIDは、CategoriesテーブルのParentIDを参照していますか? – Tim

答えて

2

なければなりません。

特定の参照とモデルに名前を付けた名前がわからないため、正確なクエリを提供することは難しいです。

希望これは、あなたが開始するのに役立ちます:

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

「カテゴリー」とサブカテゴリ」アイテムテーブルの区分と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 
    } 
); 
関連する問題