2017-04-17 18 views
0

ラムダ式を使用してデータベースからデータを取得しようとしていますが、複数のテーブルを使用する方法がわかりません。 SQLでラムダ式の複数のテーブル

私はこの記述します。

SELECT item.* 
FROM Item item, ItemListType listType 
WHERE listType.DisplayName = 'student' AND listType.ID = item.ItemListTypeId 

のが、どのように私は、ラムダ式にそれを変換することができますか?

  • Itemテーブル列:ID, ItemListTypeId
  • ItemListTypeテーブル列:ID, Name

Iは、関数を呼び出して、(ItemListTypeに存在する)名前を渡します。私はItemListTypeを取得するためにクエリを記述するために管理しているが、私は、LINQクエリで複数のテーブルを使用する方法を理解することはできません。

ItemListType result = await this.ItemListTypes 
      .Include(i => i.Items).SingleAsync(i => i.Name == name); 

答えて

0

あなたは句

from item in db.Item 
from listType in db.ItemListType 
where listType.DisplayName == "student" && item.ItemListTypeId == listType.ID 
select item 

から、ネストされたで複数のテーブルを使用することができますしかし、リットルで

from item in db.Item 
join listType in db.ItemListType on item.ItemListTypeId equals listType.ID 
where listType.DisplayName == "student" 
select item 

同じ:より良いインナーが参加クエリを作成ambda構文:

db.ItemListType 
    .Where(lt => lt.DisplayName == "student") 
    .Join(db.Item, lt => lt.ID, i => i.ItemListTypeId, (lt,i) => i) 

それとも、ItemListTypeの項目のためのナビゲーションプロパティを持っている場合:

db.ItemListType 
    .Where(lt => lt.DisplayName == "student") 
    .SelectMany(lt => lt.Items)  
+0

グレート!私はラムダでそれをどのように使うのか分かりません。これは私が今持っているものです:ItemListType result = await this.ItemListTypes.Include(i => i.Items).SingleAsync(i => i.Name == name); – TheRuler

+0

@TempTheRuler 'await db.ItemListTypes.Where(lt => lt.DisplayName ==" student ")のようなものです。 )=> i).ToListAsync() ' –

+0

@TempTheRulerまたはナビゲーションプロパティを持っている場合:' await this.ItemListTypes.Where(lt = lt.DisplayName == "student")。SelectMany(lt = lt lt .Items) .ToListAsync() ' –