Dies ist der zweite Schritt einer Frage erklärt hier (EF 4.1 Code-First: Wie kann man verwandte Daten (Eltern-Kind-Enkel) laden?) . Durch die @Slauma Anleitung konnte ich Daten abrufen. Mein erster Code war folgender:
%Vor%Es funktioniert, aber das wird viele Abfragen an die Datenbank senden, und ich suchte einen Weg, dies alles in nur einer Abfrage zu tun. Durch @Slauma 's Anleitung (erklärt auf dem obigen Link) Ich ändere die Abfrage zu dieser:
%Vor%Nun, wie kann ich Kinder (und Enkel) bei der Auswahl bestellen (wie zum Beispiel den ersten Code oben)?
Leider unterstützt das Laden von Eagern ( Include
) das Filtern oder Sortieren geladener untergeordneter Sammlungen nicht. Es gibt drei Möglichkeiten, um zu erreichen, was Sie wollen:
Mehrere Roundtrips zur Datenbank mit explizitem sortierten Laden. Das ist der erste Codeausschnitt in Ihrer Frage. Beachten Sie, dass mehrere Roundtrips nicht unbedingt schlecht sind und dass Include
und nested Include
kann zu einer enormen Multiplikation übertragener Daten zwischen Datenbank und Client führen .
Verwenden Sie das Eager-Laden mit Include
oder Include(....Select(....))
und sortieren Sie die Daten nach dem Laden in den Speicher:
Verwenden Sie eine Projektion:
%Vor% Dies ist nur ein einzelner Roundtrip und funktioniert, wenn Sie die Änderungsverfolgung nicht deaktivieren (verwenden Sie .AsNoTracking()
in dieser Abfrage nicht). Alle Objekte in dieser Projektion müssen in den Kontext geladen werden (der Grund, warum das erste ToList()
erforderlich ist) und der Kontext bindet die Navigationseigenschaften korrekt zusammen (dies ist ein Feature namens "Beziehungsspanne" ) ).
Haben Sie versucht, zu folgen?
... Wählen Sie (aus ch in c.children orderby ch.property desending Wählen Sie ch) ...
Tags und Links entity-framework entity-framework-4.1 parent-child ef-code-first order