2017-04-17 3 views
0

Ich versuche, Daten aus einer Datenbank mit einem Lambda-Ausdruck abzurufen, aber ich kann nicht herausfinden, wie mehrere Tabellen verwenden.Mehrere Tabellen in Lambda-Ausdruck

In SQL würde ich schreiben:

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

aber wie kann ich umwandeln, dass die Expression zu einem Lambda?

  • Item Tabellenspalten: ID, ItemListTypeId
  • ItemListType Tabellenspalten: ID, Name

nenne ich eine Funktion und übergibt einen Namen (der in ItemListType existiert). Ich habe es geschafft, eine Abfrage zu schreiben ItemListType für immer, aber ich kann nicht verstehen, wie mehrere Tabellen in LINQ-Abfragen verwenden:

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

Antwort

0

Sie mehrere Tabellen in verschachtelten von Klauseln verwenden können

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

Aber besser schaffen innere Verknüpfung Abfrage:

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

Samen in l ambda Syntax:

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

Oder wenn Sie Navigationseigenschaft haben für Angebote im ItemListType:

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

Great! Ich bin mir nicht sicher, wie man das in Lambda benutzt. das ist was ich jetzt habe: ItemListType result = erwarte this.ItemListTypes.Include (i => i.Items) .SingleAsync (i => i.Name == name); – TheRuler

+0

@TempTheRuler etwas wie 'erwarten db.ItemListTypes.Where (lt => lt.DisplayName ==" Schüler "). Join (db.Items, lt => lt.ID, i => i.ItemListTypeId, (lt, i) => i) .ToListAsync() ' –

+0

@TempTheRuler oder wenn Sie eine Navigationseigenschaft haben:' aware this.ItemListTypes.Where (lt => lt.DisplayName == "student"). SelectMany (lt => lt.Items) .ToListAsync() ' –