C # | .NET 4.5 | Entity Framework 5
Ich habe eine Klasse in Entity Framework, die so aussieht:
%Vor%ID ist die Kennung des Standorts, ParentID verknüpft sie mit einem übergeordneten Element und Children enthält alle untergeordneten Standorte des übergeordneten Standorts. Ich suche nach einer einfachen Möglichkeit, wahrscheinlich rekursiv, um alle "Location" und ihre Kinder in eine einzige Liste mit den Location.IDs zu bekommen. Ich habe Probleme, dies rekursiv zu verstehen. Jede Hilfe wird geschätzt.
Das ist was ich bisher habe, es ist eine Erweiterung der Entity-Klasse, aber ich glaube, es könnte besser / einfacher gemacht werden:
%Vor%AKTUALISIERT
Ich schrieb die Rekursion in SQL, warf diese in ein SP und zog sie dann in Entity. Schien sauberer und einfacher für mich als Linq, und nach den Kommentaren Linq und Entity zu beurteilen scheinen nicht der beste Weg zu gehen. Danke für die Hilfe!
Sie können SelectMany
ausführen %Vor%Sie können die Bedingung für einige selektive Ergebnisse wie
verwenden %Vor%Wenn Sie nur IDs von Kindern benötigen, können Sie dies tun
%Vor%Versuchen Sie diese Erweiterungsmethode:
%Vor%Und Sie können es so verwenden:
%Vor%Das Entitätsframework unterstützt derzeit keine Rekursion, und aus diesem Grund können Sie entweder
Die einzige wirkliche Option wäre, LINQ zu vermeiden, um die Abfrage auszudrücken, und stattdessen auf Standard-SQL zurückzugreifen.
Entity-Framework unterstützt dieses Szenario ziemlich gut, ob Sie Code zuerst verwenden oder nicht.
Berücksichtigen Sie für Code zuerst etwas in der Art von
%Vor%Verwenden Sie für das Modell zuerst eine definierende Abfrage < Ich halte das für eine gute Option, da es weitere Kompositionen oder gespeicherte Prozeduren erlaubt.
Um rekursiv Daten zurückzuerhalten, müssen Sie rekursive CTEs verstehen, vorausgesetzt, Sie verwenden SQL Server und Version 2005 +
BEARBEITEN:
Hier ist der Code für eine rekursive Abfrage auf eine beliebige Tiefe. Ich stelle das nur zum Spaß zusammen, ich bezweifle, dass es sehr effizient wäre!
%Vor%Die abgeflachte Liste befindet sich in der Variablenabfrage
Ich möchte meine eigene Lösung vorstellen, die aus den folgenden Referenzen modifiziert wurde:
%Vor%Beispiel:
%Vor%Ausgabe:
Klasse:
%Vor%Ref. Ссылка
Hinweis: Die andere Referenz kann nicht gefunden werden, aber eine andere Person auf SO hat eine Antwort veröffentlicht, von der ich etwas Code kopiert habe.
Ich hatte keine Children
Stütze in meinem Modell, also funktioniert die Antwort von Nikhil Agrawal nicht für mich, also hier ist meine Lösung.
Mit folgendem Modell:
%Vor%Sie können unter Verwendung von:
Kinder von einem Element erhalten %Vor%Zum Beispiel
%Vor% Wenn Locations
in Ihrem DB-Kontext ein DbSet<Location>
ist, löst dies Ihr Problem. "Ich suche nach einem einfachen Weg ... alle" Location "und ihre Kinder in eine einzige Liste mit dem Standort zu bringen .IDs ". Scheint so, als ob ich etwas verpasse, also bitte geklärt, wenn es so ist.
Tags und Links c# entity-framework linq recursion