c# - tutorial - Orden múltiple por con LINQ
sintaxis linq c# (1)
Puede usar los métodos de extensión ThenBy y ThenByDescending :
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)
Esta pregunta ya tiene una respuesta aquí:
- Múltiple “orden por” en LINQ 7 respuestas
Comienzo con una clase básica que quiero manipular en una lista usando LINQ, algo como lo siguiente:
public class FooBar
{
public virtual int Id { get; set; }
public virtual string Foo{ get; set; }
public virtual string Bar{ get; set; }
}
Esto es lo que finalmente descubrí para resolver mi problema usando las cosas que no son lambda LINQ.
// code somewhere else that works and gets the desired results
var foobarList = GetFooBarList(); // Abstracted out - returns List<Foobar>
// 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
}
Lo que realmente me interesa es si se puede lograr lo mismo utilizando los métodos de extensión basados en Lambda del IEnumerable genérico para lograr lo mismo. Google me dice que puedo hacer algo como lo siguiente para lograrlo
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})
.Select(x=>x);
Sin embargo, si hago eso, obtengo un error de tiempo de ejecución cuando llego a la instrucción foreach. El error me dice que al menos un objeto tiene que implementar IComparible, lo cual puedo ver ya que estoy usando un tipo anónimo para el método .OrderBy ().
Entonces, ¿hay una manera de lograr lo que quiero usando la forma Lambda?