首页 文章

使用LINQ进行多次订购[重复]

提问于
浏览
204

这个问题在这里已有答案:

我从一个基本类开始,我想使用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 回答

  • 474

    您可以使用ThenByThenByDescending扩展方法:

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

相关问题