我从一个基本类开始,我想在一个列表中使用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  
}

我真正好奇的是,是否可以使用基于Lambda的扩展方法从泛型IEnumerable完成同样的事情。谷歌告诉我,我可以做以下事情来完成它:

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

然而,如果我这样做,当我命中foreach语句时,我会得到一个运行时错误。这个错误告诉我,至少有一个对象必须实现IComparible,我可以看到这一点,因为我为. orderby()方法使用了匿名类型。

有没有办法用Lambda来实现我想要的呢?


你可以使用ThenBy和thenbydescent扩展方法:

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