使用group by对Linq的输出进行排序

时间:2011-11-17 16:40:17

标签: linq sorting group-by

下面的linq查询不会返回序列字段按降序排序的结果。而是返回结果而不考虑orderby:

var qr = from l in reports.layouts
    where l.job == jobNumber
    orderby l.sequence descending
    group l by l.filename;

但是,下面的代码能够返回按文件名字段分组的结果,并按顺序字段排序降序:

var qr = reports.layouts
   .Where(l => l.job == jobNumber)
   .OrderBy(l => l.filename)
   .GroupBy(l => l.filename, (l, c) => c.OrderByDescending(x => x.sequence));

任何人都可以提供有关如何编写第一个查询以按所需降序返回结果的任何见解吗?

2 个答案:

答案 0 :(得分:1)

var qr =
  from l in reports.layouts
  where l.job == jobNumber
  group l by l.filename into g
  orderby g.Key descending
  select
    from x in g
    orderby x.sequence descending
    select x;

答案 1 :(得分:1)

分组会破坏订单。你的两个问题不一样。

第一个翻译成更像:

var qr = reports.layouts
   .Where(l => l.job == jobNumber)
   .OrderByDescending(l => l.sequence)
   .GroupBy(l => l.filename);

由于GroupBy在订购之后发生,它有效地破坏了订购。

就个人而言,这是一个案例,我发现你在意图方面使用的方法链语法比等效的查询语法更清晰。