我从一个基本的类开始,想要使用LINQ在列表中进行操作,就像以下示例:
public class FooBar
{
public virtual int Id { get; set; }
public virtual string Foo { get; set; }
public virtual string Bar { get; set; }
}
这就是我最终发现的使用非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()
方法中使用了匿名类型。
那么,有没有一种使用Lambda方式实现我想要的功能的方法呢?