2016-12-02 2 views
0

Ich habe eine List<CableList>. CableList hat eine Eigenschaft namens Location, die ein Objekt ist, das eine Eigenschaft namens Facility hat. Facility ist auch ein Objekt.C# Objektliste nicht sortiert nach mehreren Objekten

Ich versuche, durch Facility.FacilityTitle zu bestellen. FacilityTitle ist eine Zeichenfolge.

I

Runlist.OrderBy(x=> x.Location.Facility.FacilityTitle) 
    .Skip(variable) 
    .Take(Paginationnum) 
    .ToList(); 

tue dies gibt die Liste, aber es wird nicht von FacilityTitle bestellt.

+2

Was ist der Ausgang dieses 'OrderBy' Funktion? – RandomStranger

+2

Ordnen Sie das zu etwas zu? Es wird eine neue Liste erstellen. – juharr

+0

Haben Sie Ihr Listenobjekt genauso aufgerufen wie die Klasse, von der es eine Instanz ist? Sind Sie sicher, dass Standort und Einrichtung nicht null sind? Wenn dies Linq to Sql (EF) ist, sollte Include hinzugefügt werden, um auch Location und Facility abzurufen. – Max

Antwort

-3

Wenn Sie die Methode ToList() verwenden, konvertieren Sie Ihre Sequenz in eine nicht sortierte Liste. diesen Code Verwenden Sie stattdessen:

IEnumerable<CableList> list=Runlist.OrderBy(x=> x.Location.Facility.FacilityTitle) 
    .Skip(variable) 
    .Take(Paginationnum); 
+2

Das ist falsch. ToList bewahrt die Reihenfolge. – Jakotheshadows

+1

"es konvertieren Sie Ihre Sequenz in nicht ordered Liste" - Ich bin mir nicht sicher, was Sie damit meinen. Das Aufrufen von ToList konvertiert nur ein IEnumerable in ein List-Objekt. Die Reihenfolge ändert sich nicht, also wenn die Artikel bestellt wurden, bevor sie in der gleichen Reihenfolge nach ... – Chris

+0

U wissen, ich fühle mich wie ein Idiot, es war eine Hölle einer Woche –

1

Hier Beispiel mit Linq zu Objekten. Die ToList hat wirklich die Reihenfolge der Liste nicht geändert.

List<CableList> Runlist = new List<CableList> 
{ 
    new CableList { Location = new Location 
    { Facility = new Facility { FacilityTitle = "titel3" }}}, 
    new CableList { Location = new Location 
    { Facility = new Facility { FacilityTitle = "titel2" }}}, 
    new CableList { Location = new Location 
    { Facility = new Facility { FacilityTitle = "titel5" }}}, 
    new CableList { Location = new Location 
    { Facility = new Facility { FacilityTitle = "titel1" }}}, 
    new CableList { Location = new Location 
    { Facility = new Facility { FacilityTitle = "titel9" }}} 
}; 

System.Diagnostics.Debug.WriteLine("Before order:"); 
foreach (var itm in Runlist) 
    System.Diagnostics.Debug.WriteLine(itm.Location.Facility.FacilityTitle); 

var orderedResult = Runlist.OrderBy(x => x.Location.Facility.FacilityTitle) 
    .Skip(1) 
    .Take(4) 
    .ToList(); 

System.Diagnostics.Debug.WriteLine("After order:"); 
foreach (var itm in orderedResult) 
    System.Diagnostics.Debug.WriteLine(itm.Location.Facility.FacilityTitle); 

Ausgang:

Before order: 
titel3 
titel2 
titel5 
titel1 
titel9 
After order: 
titel2 
titel3 
titel5 
titel9 
Verwandte Themen