【问题标题】:Multiple Order By with LINQ [duplicate]使用 LINQ 进行多重排序 [重复]
【发布时间】:2011-01-20 02:32:01
【问题描述】:

我从一个我想使用 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 的扩展方法来完成同样的事情。 Google 告诉我,我可以执行以下操作来完成它:

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

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

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

【问题讨论】:

  • 如果您想知道每个可能的查询表达式对应的“流利方法”是什么,请阅读规范的第 7.15.2 节。
  • @Eric Lippert,有一个 C# 3.0 查询表达式翻译备忘单,由 Bart Desmet 编写,我发现它作为快速参考非常有用:bartdesmet.net/blogs/bart/archive/2008/08/30/…

标签: c# linq lambda


【解决方案1】:

您可以使用ThenByThenByDescending 扩展方法:

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

【讨论】:

  • 猜想我应该在提出问题之前完全了解 API ;) 看起来您可以根据需要多次链接 .ThenBy() 语句。再次感谢!
  • .AndThen()怎么样
  • No .AndThen()!
  • (函数 AndThen() { AndThen() })()
  • 有点惭愧,在我6年的开发中之前不知道这个......
猜你喜欢
  • 1970-01-01
  • 2012-04-22
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-08
  • 1970-01-01
相关资源
最近更新 更多