这个问题已经在这里有了答案 :
LINQ中的多个“ order by” (7个答案)
2年前关闭。
我首先要使用LINQ在List中进行操作的基本类,如下所示:
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告诉我可以执行以下操作来完成此操作:
IEnumerable
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar}) .Select(x=>x);
但是,如果执行此操作,则在我单击该foreach语句时会收到运行时错误。该错误告诉我,至少有一个对象必须实现IComparible,因为我正在为该.OrderBy()方法使用匿名类型,所以我可以看到这一点。
foreach
IComparible
.OrderBy()
那么有没有办法使用Lambda方法来完成我想要的工作?
您可以使用ThenBy和ThenByDescending扩展方法:
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)