Несколько заказов с помощью LINQ

Я начинаю с базового класса, который я хочу манипулировать в List с помощью LINQ, примерно следующим образом:

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

Это то, что я в конечном итоге выяснил, чтобы решить мою проблему, используя материал non 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  
}

То, что мне действительно интересно, это то, что то же самое можно сделать, используя методы расширения, основанные на Lambda, от общего IEnumerable, чтобы выполнить одно и то же. Google говорит мне, что я могу сделать что-то вроде следующего, чтобы выполнить его.

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

Однако, если я это сделаю, я получаю ошибку во время выполнения, когда я удаляю оператор foreach. Ошибка говорит мне, что хотя бы один объект должен реализовать IComparible, что я вижу, поскольку я использую анонимный тип для метода .OrderBy().

Итак, есть способ сделать то, что я хочу, используя способ Лямбда?

Ответ 1

Вы можете использовать ThenBy и ThenByDescending методы расширения:

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