Я начинаю с базовым классом, который я хочу, чтобы манипулировать в списке с помощью LINQ, что-то вроде следующего:Multiple Заказывайте с 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
}
Что мне действительно интересно, если то же самое может быть достигнуто с помощью методов расширения на основе лямбда-офф родовое IEnumerable, чтобы сделать то же самое. Google говорит мне, что я могу сделать что-то вроде следующего, чтобы выполнить его
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})
.Select(x=>x);
Однако, если я делаю это я получаю сообщение об ошибке выполнения, когда я попал заявление Еогеаспа. Ошибка говорит мне, что хотя бы один объект должен реализовать IComparible, что я вижу, поскольку я использую анонимный тип для метода .OrderBy().
Итак, есть ли способ выполнить то, что я хочу, используя способ Лямбда?
Если вы хотите знать, что «беглые методы» являются соответствующими каждым возможным выражением запроса, прочитайте раздел 7.15.2 спецификации. –
@ Эрик Липперт, есть Citation 3.0, Query Expression Translation Cheat Sheet, написанный Bart Desmet, который я нашел очень полезным в качестве быстрой справки: http://bartdesmet.net/blogs/bart/archive/2008/08/30/ c-3-0-query-expression-translation-cheat-sheet.aspx. –
Возможный дубликат [Несколько порядков] по «в LINQ» (http://stackoverflow.com/questions/298725/multiple-order-by-in-linq) – jrummell