与LINQ的多个订单
我从一个基本的类开始,我想在使用LINQ的列表中进行操作,如下所示:
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 }
我真正好奇的是,如果使用通用IEnumerable的基于Lambda的扩展方法来完成同样的事情,也可以完成同样的事情。 谷歌告诉我,我可以做下面的事情来完成它
var resultSet = foobarList.OrderBy(x => new {x.Foo, x.Bar}) .Select(x=>x);
但是,如果我这样做,我遇到了一个运行时错误,当我点击foreach语句。 该错误告诉我,至less有一个对象必须实现IComparible,我可以看到,因为我使用.OrderBy()方法的匿名types。
那么有没有办法用Lambda的方式来实现我想要的?
您可以使用ThenBy和ThenByDescending扩展方法:
foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)