Ok, ich habe dreistufige Entitäten mit der folgenden Hierarchie: Kurs -> Modul -> Kapitel
Hier war die ursprüngliche EF LINQ-Anweisung:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters))
.Single(x => x.Id == id);
Jetzt möchte ich eine weitere Entität namens Lab einfügen, die einem Kurs zugeordnet ist.
Wie füge ich die Lab-Entität hinzu?
Ich habe Folgendes versucht, aber es hat nicht funktioniert:
Course course = db.Courses
.Include(i => i.Modules.Select(s => s.Chapters) && i.Lab)
.Single(x => x.Id == id);
Irgendwelche Ideen zur Aufnahme der 2. Entität?
Jeder Ratschlag oder jede Information wäre sehr dankbar. Vielen Dank!
.Include
sollte funktionieren, es sei denn, Sie meinen, dass das zusätzliche Include ein Enkelkind ist. Sehen Sie dies oder eine bessere Option ist diesAntworten:
Haben Sie versucht, nur eine weitere hinzuzufügen
Include
:Ihre Lösung schlägt fehl, da
Include
kein boolescher Operator erforderlich istUpdate Um mehr zu erfahren, laden Sie LinqPad herunter und sehen Sie sich die Beispiele an. Ich denke, es ist der schnellste Weg, sich mit Linq und Lambda vertraut zu machen.
Zunächst einmal - der Unterschied zwischen
Select
undInclude
besteht darin, dass Sie mit einem Select entscheiden, was Sie zurückgeben möchten (auch bekannt als Projektion). Das Include ist eine Funktion zum eifrigen Laden , die Entity Framework mitteilt, dass Daten aus anderen Tabellen enthalten sein sollen.Die Include-Syntax kann auch eine Zeichenfolge sein. So was:
Die Beispiele in LinqPad erklären dies jedoch besser.
quelle
.Include("Module.Chapter")
. Irgendeine Idee warum sollte das sein?System.Data.Enity
um auf die Erweiterungsmethode zuzugreifen. Weitere Infos hierusing System.Data.Entity;
geschafft. Vielen Dank!In Entity Framework Core (
EF.core
) können Sie die.ThenInclude
nächsten Ebenen einbeziehen.Weitere Informationen: https://docs.microsoft.com/en-us/ef/core/querying/related-data
Hinweis: Sagen Sie müssen Sie mehrere
ThenInclude()
aufblog.Posts
, nur das wiederholen ,Include(blog => blog.Posts)
und das andere zu tunThenInclude(post => post.Other)
.quelle
ThenInclude
in EF Core tun . Stellen Sie vielleicht eine Frage mit einem guten Beispiel, damit wir sie beantworten können.Include
ist Teil einer fließenden Benutzeroberfläche, sodass Sie mehrereInclude
Anweisungen nacheinander schreiben könnenquelle
Sie können es auch versuchen
quelle
Man kann eine Erweiterungsmethode wie folgt schreiben:
Und verwenden Sie es auch in einer generischen Implementierung so:
quelle
Include