Orden múltiple Por con LINQ [duplicado]


Esta pregunta ya tiene una respuesta aquí:

Empiezo con una clase básica que quiero manipular en una Lista usando LINQ, algo así 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 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 tengo curiosidad se trata de si lo mismo se puede lograr utilizando los métodos de extensión basados en Lambda fuera de genericumerable 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 lo hago, obtengo un error de tiempo de ejecución cuando golpeo la instrucción foreach. El error me dice que al menos un objeto tiene que implementar IComparible, que puedo ver que ya que estoy utilizando un tipo anónimo para el .Método OrderBy ().

Así que hay una manera de ¿lograr lo que quiero usando el método Lambda?

 193
Author: H.B., 2010-02-23

1 answers

Puedes usar los métodos de extensión ThenBy y ThenByDescending :

foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)
 448
Author: Pop Catalin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-09 15:09:33