web-dev-qa-db-fra.com

Commande multiple par avec LINQ

Je commence par une classe de base que je souhaite manipuler dans une liste à l'aide de LINQ, à peu près comme suit:

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

C’est ce que j’ai finalement découvert pour résoudre mon problème en utilisant le système LINQ non lambda.

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

Je suis vraiment curieux de savoir si la même chose peut être accomplie en utilisant les méthodes d’extension basées sur Lambda à partir de IEnumerable générique pour accomplir la même chose. Google me dit que je peux faire quelque chose comme ceci pour l'accomplir

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

Cependant, si je le fais, j'obtiens une erreur d'exécution lorsque je clique sur l'instruction foreach. L'erreur me dit qu'au moins un objet doit implémenter IComparible, ce que je peux constater puisque j'utilise un type anonyme pour la méthode .OrderBy ().

Alors, y a-t-il un moyen d'accomplir ce que je veux en utilisant la méthode Lambda?

209
sdanna

Vous pouvez utiliser les méthodes d'extension ThenBy et ThenByDescending :

foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)
486
Pop Catalin