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?
Vous pouvez utiliser les méthodes d'extension ThenBy et ThenByDescending :
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)