Multiple Order By with LINQ
本问题已经有最佳答案,请猛点这里访问。
我从一个基本类开始,我想使用linq在列表中操作它,如下所示:
1 2 3 4 5 6 | public class FooBar { public virtual int Id { get; set; } public virtual string Foo{ get; set; } public virtual string Bar{ get; set; } } |
这就是我最终发现的用非lambda LINQ解决问题的方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 | // 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来实现相同的功能。谷歌告诉我我可以做如下的事情来完成它
1 2 |
但是,如果这样做,当我点击foreach语句时会得到一个运行时错误。错误告诉我,至少有一个对象必须实现IComparable,因为我正在为.orderby()方法使用匿名类型,所以可以看到这一点。
那么,有没有一种方法可以用lambda方法实现我想要的呢?
您可以使用ThenBy和ThenByDescending扩展方法:
1 | foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar) |