256 votes

Plusieurs Order By avec LINQ

Je commence avec une classe de base que je veux manipuler dans une Liste à l'aide de LINQ, quelque chose comme ce qui 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 trouvé pour résoudre mon problème, en utilisant le non lambda LINQ choses.

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

Ce que je suis vraiment curieux de savoir si la même chose peut être accompli en utilisant le Lambda en fonction des méthodes d'extension hors du générique de IEnumerable pour accomplir la même chose. Google me dit que je peux faire quelque chose comme ce qui suit pour l'accomplir

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

Cependant si je fais ce que je reçois une erreur d'exécution, quand j'appuie sur l'instruction foreach. L'erreur me dit que au moins un objet pour mettre en œuvre IComparible, je peux voir que depuis que je suis en utilisant un type anonyme pour l' .Méthode d'OrderBy ().

Donc, il y a un moyen pour accomplir ce que je veux en utilisant le Lambda?

586voto

Pop Catalin Points 25033

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X