2016-06-24 5 views
4

Ich bekomme die Werte aus der Datenbank "Media" -Tabelle mit der folgenden Abfrage.Jetzt muss ich die Zeilen durch seine Eltern-ID-Mittel bestellen Zuerst muss ich die Eltern-ID-Zeile anzeigen und dann darunter ihre untergeordnete Zeile wie die folgende Tabelle:Optimieren Sie die Linq-Abfrage, um die Zeile zu sortieren?

ID Name ParentMediaId 
3  C   null 
1  A   3 
4  D   null 
2  B   4 

Wie kann ich die Ergebnisse wie die obere Tabelle erhalten, indem Sie die folgende Datentabelle verwenden und folgende Linq-Abfrage mit Lambda-Ausdruck ändern?

Medientabelle in Datenbank:

ID  Name  ParentMediaId 
1  A   3 
2  B   4 
3  C   null 
4  D   null 

Abfrage der Daten zu erhalten:

var dataset = _mediaRepository.GetAll(). 
        Where(d => d.matter== matterId).Select(d => new 
        { 
         d.Id, 
         d.Name, 
         d.ParentMediaId, 
        }).ToList(); 
+0

die Tiefe der Beziehungen 1 oder größer sein? –

+0

ParentMediaId ist ein eigener Fremdschlüssel –

+0

Ja, aber ich meine, wenn es so etwas wie 'Id-Name-Parent' gibt: '1-A-null',' 2-B-1' und '3-C- 2 ', hier A ist das Elternteil von B und B ist das Elternteil von C –

Antwort

5

Sie können OrderBy von ParentMediaId, wenn der Wert nicht null ist; andernfalls Id, dann bestellen Sie mit ThenBy von ParentMediaId, um die Eltern zuerst erscheinen zu lassen. Für die OrderBy können Sie null-coalescing operator (??) verwenden. Er gibt den linken Operanden zurück, wenn der Operand nicht null ist; andernfalls gibt es den rechten Operanden zurück.

var objects = _mediaRepository.GetAll() 
        .Where(d => d.matter== matterId) 
        .Select(d => new 
        { 
         d.Id, 
         d.Name, 
         d.ParentMediaId, 
        }); 

var dataset = objects.OrderBy(o => o.ParentMediaId ?? o.Id) 
        .ThenBy(o => o.ParentMediaId) 
        .ToList(); 

Wenn Childs zuerst erscheint, verwenden Sie dann ThenByDescending statt ThenBy.

Element wird wie folgt bestellt werden:

ID Name ParentMediaId 
3  C   null 
1  A   3 
4  D   null 
2  B   4 
+0

Es gibt mir nicht das gewünschte Ergebnis, es ist nur firlsty zeigt alle Zeilen mit Parentid und dann Zeilen haben keine Eltern-ID. Bitte sehen Sie in der ersten Tabelle, ich brauche die Sortierreihenfolge wie die erste Tabelle. –

+0

@ManjitSingh: Aktualisierte Antwort. –

+1

Danke mann @ Arturo Menchaca, Es hat für mich funktioniert, du hast meinen Tag gerettet :) –