Commande multiple avec LINQ

Je commence par une classe de base que je veux manipuler dans une liste en utilisant LINQ, quelque chose comme ceci:

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

C’est ce que j’ai finalement découvert pour résoudre mon problème en utilisant les trucs 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 } 

Ce que je suis vraiment curieux, c’est de savoir si la même chose peut être accomplie en utilisant les méthodes d’extension basées sur Lambda sur IEnumerable générique pour accomplir la même chose. Google me dit que je peux faire quelque chose comme ceci pour le réaliser

 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 j’appuie sur l’instruction foreach. L’erreur me dit qu’au moins un object doit implémenter IComparible, ce que je peux voir car j’utilise un type anonyme pour la méthode .OrderBy ().

Y a-t-il un moyen d’accomplir ce que je veux en utilisant la méthode Lambda?

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

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