使用LINQ进行多次排序

时间:2010-02-23 14:35:13

标签: c# linq lambda

我从一个基本类开始,我想使用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完成同样的事情可以实现相同的目的。谷歌告诉我,我可以采取以下措施来实现它

var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar})  
                          .Select(x=>x);

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

那么有没有办法用Lambda方式实现我想要的东西?

1 个答案:

答案 0 :(得分:475)

您可以使用ThenByThenByDescending扩展程序:

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