2017-04-17 130 views
0

我試圖從一個數據庫中使用lambda表達式獲取數據,但我無法弄清楚如何使用多個表。lambda表達式中的多個表

在SQL我會寫這樣的:

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

但如何將其轉換成一個lambda表達式?

  • Item表列:ID, ItemListTypeId
  • ItemListType表列:ID, Name

我調用一個函數,並傳遞一個名稱(它存在於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

太好了!我只是不確定如何在lambda中使用它。這是我現在擁有的:ItemListType結果=等待this.ItemListTypes.Include(i => i.Items).SingleAsync(i => i.Name == name); – TheRuler

+0

@TempTheRuler類似於'await db.ItemListTypes.Where(lt => lt.DisplayName ==「student」)。Join(db.Items,lt => lt.ID,i => i.ItemListTypeId,(lt,i )=> i).ToListAsync()' –

+0

@TempTheRuler或者如果你有導航屬性:'await this.ItemListTypes.Where(lt => lt.DisplayName ==「student」)。SelectMany(lt => lt.Items) .ToListAsync()' –