Ordine multiplo con LINQ

Comincio con una class base che voglio manipolare in una lista usando LINQ, qualcosa come la seguente:

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

Questo è ciò che alla fine ho scoperto per risolvere il mio problema usando la roba LINQ non lambda.

 // 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 } 

Ciò di cui sono davvero curioso è se lo stesso può essere realizzato utilizzando i metodi di estensione basati su Lambda al di fuori dell’IEnumerable generico per ottenere la stessa cosa. Google mi dice che posso fare qualcosa di simile al seguente per realizzarlo

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

Tuttavia se lo faccio ottengo un errore di runtime quando premo l’istruzione foreach. L’errore mi dice che almeno un object deve implementare IComparible, che posso vedere dal momento che sto usando un tipo anonimo per il metodo .OrderBy ().

Quindi c’è un modo per realizzare ciò che voglio usando il modo Lambda?

Puoi utilizzare i metodi di estensione ThenBy e ThenByDescending :

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