一尘不染

LINQ的多重订购者[重复]

c#

这个问题已经在这里有了答案

LINQ中的多个“ order by”
(7个答案)

2年前关闭。

我首先要使用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来完成相同的事情,从而实现相同的目的。Google告诉我可以执行以下操作来完成此操作:

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

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

那么有没有办法使用Lambda方法来完成我想要的工作?


阅读 232

收藏
2020-05-19

共1个答案

一尘不染

您可以使用ThenByThenByDescending扩展方法:

foobarList.OrderBy(x => x.Foo).ThenBy( x => x.Bar)
2020-05-19