Zuerst hatten Thomas Levesque eine gute Lösung für die Bestellung von Feldern in einer verknüpften Tabelle in dem die Beziehung nicht immer da sein kann:Entity Framework 4 und Linq: SortiertNach ein Feld in einer Abfrage verschachtelt: Refactoring meinen Code
userQuery = userQuery.OrderBy(u =>
(u.Department != null) ? u.Department.Name : String.Empty);
Ich muss das Gleiche tun. Meine Gesamtwurzel ist enorm:
Ist dies wirklich die Art, dies zu tun, oder gibt es etwas viel einfacher zu lesen? Mein anderes Problem ist, dass das verschachtelte myField einen übereinstimmenden "Standard" -Wert hat, der in der Query der obersten Ebene sitzt, die auch von myField benannt wird. Die Idee war, durch das Zusammenwachsen dieser beiden Felder zu ordnen (??).
Edit: Ich denke, das würde den „Standardwert“ aus dem ersten Feld ist:
myQuery = myQuery.OrderBy(p =>
(p.Seconds == null
? p.myDefaultField // Used to be zero
: p.Seconds.FirstOrDefault() == null
? p.myDefaultField
: p.Seconds.First().Thirds == null
? p.myDefaultField
: p.Seconds.First().Thirds.FirstOrDefault() == null
? p.myDefaultField
: p.Seconds.First().Thirds.First().Forths == null
? p.myDefaultField
: p.Seconds.First().Thirds.First().Forths.FirstOrDefault() == null
? p.myDefaultField
: p.Seconds.First().Thirds.First().Forths.First().myField));
Wie konnte ich diese SortiertNach umschreiben sauberer zu sein? Dieser Code schlägt mit einem Fehler von "Kann Elemente des Typs 'System.Collections.Generic.IEnumerable`1' nicht vergleichen. Nur primitive Typen (wie Int32, String und Guid) und Entitätstypen werden unterstützt."
Nun, vielleicht sollten Sie dieses Problem versuchen, irgendwo anders zu lösen. Sind Sie sicher, dass Sie durch vier Beziehungen navigieren müssen? Können Sie die Datenbank und/oder Mappings nicht ändern, damit Sie die Daten in einem passenderen Format erhalten? –
Ich kann immer eine Ansicht und/oder gespeicherte Prozedur hinzufügen, aber das Endergebnis ist ein hierarchisches JSON-Objekt, das zum Client geht. Also würde ich am Ende eine Hierarchie von einem abgeflachten Objekt neu erstellen. –