Mehrfachbestellung mit LINQ

Ich beginne mit einer Basisklasse, die ich in einer Liste mit LINQ manipulieren möchte, etwa so:

public class FooBar { public virtual int Id { get; set; } public virtual string Foo{ get; set; } public virtual string Bar{ get; set; } } 

Dies ist, was ich letztendlich herausgefunden habe, um mein Problem mit dem Nicht-Lambda-LINQ-Zeug zu lösen.

 // code somewhere else that works and gets the desired results var foobarList = GetFooBarList(); // Abstracted out - returns List // Interesting piece of code that I want to examine var resultSet = from foobars in foobarList orderby foobars.Foo, foobars.Bar select foobars; // Iterate and do something interesting foreach (var foobar in resultSet) { // Do some code } 

Worüber ich wirklich neugierig bin, ist, ob das Gleiche mit den Lambda-basierten Erweiterungsmethoden des generischen IEnumerable erreicht werden kann, um dasselbe zu erreichen. Google sagt mir, dass ich etwas wie das Folgende tun kann, um es zu erreichen

 var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar}) .Select(x=>x); 

Wenn ich das tue, erhalte ich einen Laufzeiterrors, wenn ich die foreach-statement triff. Der Fehler sagt mir, dass mindestens ein Objekt IComparible implementieren muss, was ich sehen kann, da ich einen anonymen Typ für die Methode .OrderBy () verwende.

Gibt es also eine Möglichkeit, das zu erreichen, was ich mit dem Lambda-Weg erreichen möchte?

   

Sie können die Erweiterungsmethoden ThenBy und ThenByDescending verwenden:

 foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)