Я начинаю с базового класса, который я хочу манипулировать в 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().
Итак, есть способ сделать то, что я хочу, используя способ Лямбда?