2009-04-11 7 views
4

Ich erwartete, dass die folgende LINQ-Abfrage nach FirstName sortiert, aber die OrderBy-Erweiterungsmethode scheint keine Auswirkungen zu haben. später in meinem CodeÄndern der Sortierreihenfolge einer LINQ-Abfrage

DataClassesDataContext dc = new DataClassesDataContext(); 

var query = from contact in dc.Contacts 
      select contact; 

query.OrderBy(c => c.FirstName); 

Alles funktioniert gut, wenn ich die orderby in der anfänglichen Abfragedefinition enthalten, aber ich möchte es ändern auf Bedingungen basieren können.

Irgendeine Idee, warum das nicht funktioniert?

Antwort

11

versuchen

query = query.OrderBy(c => c.FirstName); 

oder

var sortedQuery = query.OrderBy(c => c.FirstName); 

Die OrderBy erstellt eine neue Sequenz mit.

7

Das Problem ist, dass OrderBy die vorhandene Abfrage nicht ändert. Stattdessen erstellt es eine neue Abfrage, die die Werte in der Abfrage sortiert. Sie müssen dieses Ergebnis erfassen

var sortedQuery = query.OrderBy(c => c.FirstName); 

Dies gilt für praktisch jeden einzelnen LINQ-Operator. Die eigentliche Abfrage wird nicht geändert. Stattdessen filtern oder projizieren sie das Ergebnis der Abfrage in einen neuen Abfragewert und geben ihn aus der Methode zurück.

7

Neben der Antwort von @Mike Two müssen Sie daran denken, dass Sie mehrere ThesBy nach dem ursprünglichen OrderBy verwenden müssen, um mehrere Sortierungen zu haben. Andernfalls ersetzen Sie einfach die erste Sortierung.

var query = from contact in dc.Contacts 
     select contact; 

query = query.OrderBy(c => c.FirstName); 
query = query.ThenBy(c => c.LastName); 

foreach (var contact in query) 
{ 
    ... 
} 

Eigentlich wäre meine Präferenz alle zusammen mit Erweiterungsmethoden Kette ihnen sein, aber offensichtlich wird dies nicht funktionieren, wenn Sie sie bedingte vornehmen müssen.

var query = dc.Contacts 
       .OrderBy(c => c.FirstName) 
       .ThenBy(c => c.LastName); 

foreach (var contact in query) 
{ 
    ... 
} 
Verwandte Themen