Этот вопрос уже имеет ответ здесь:
Я запускаю с основного класса, которым я хочу управлять в Списке с помощью LINQ, чего-то как следующее:
public class FooBar
{
public virtual int Id { get; set; }
public virtual string Foo{ get; set; }
public virtual string Bar{ get; set; }
}
Это - то, что я в конечном счете узнал для решения моей проблемы с помощью не лямбды материал LINQ.
// 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
}
То, на предмет чего мне действительно любопытно, - то, если то же может быть выполнено с помощью основанных на лямбде дополнительных методов прочь универсального IEnumerable для выполнения того же самого. Google говорит мне, что я могу сделать что-то как следующее для выполнения его
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})
.Select(x=>x);
Однако, если я делаю это, я получаю ошибку периода выполнения, когда я поразил foreach оператор. Ошибка говорит мне, что по крайней мере один объект должен реализовать IComparible, который я вижу это, так как я использую анонимный тип для.OrderBy () метод.
Так существует ли способ выполнить то, что я хочу использовать Лямбду путь?
Вы можете использовать методы расширения ThenBy и ThenByDescending :
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)