使用groupby在循环中对列表进行排序

时间:2017-07-04 08:02:03

标签: list linq

我有一个像这样的linq循环:

foreach (var group in part.Profiles.Skip(ixstart).
             GroupBy(b => new { b.Number, b.X }).
             OrderBy(g => g.Key.Number).ThenBy(g => g.Key.X))
{
     // .... code
}

在...代码对列表进行排序是否安全? part.Profiles.Sort()
我没有例外。

1 个答案:

答案 0 :(得分:1)

我怀疑它结果是安全的,因为GroupBy不会传输结果 - 它会在返回任何值之前消耗输入的所有。 (它是 lazy ,因为它在你要求它的第一个元素之前不会做任何工作,但它会消耗所有的输入。)

但是,我肯定依赖于此。它会给许多读者敲响警钟,看似无辜的改变可能会搞砸一切。我还说这是一个令人困惑的事情,在一个循环中对一个集合进行排序,该循环遍及该集合。选项:

  • 预先排序
  • 之后排序
  • 实现您正在迭代的集合,使其独立于原始集合(例如,通过调用ToList()并使用结果)