关于c#:使用LINQ进行多次排序

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
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})  
                          .Select(x=>x);

但是,如果这样做,当我点击foreach语句时会得到一个运行时错误。错误告诉我,至少有一个对象必须实现IComparable,因为我正在为.orderby()方法使用匿名类型,所以可以看到这一点。

那么,有没有一种方法可以用lambda方法实现我想要的呢?


您可以使用ThenBy和ThenByDescending扩展方法:

1
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)