2011-11-17 47 views
1

下面的linq查询未返回序列字段以降序排序的结果。相反的结果,而不考虑排序依据返回:对来自Linq的输出进行分组排序

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

但是下面的代码能够返回由filename字段分组的结果,并下令由序列字段decending:

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

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

回答

1

分组破坏了订单。你的两个查询是不一样的。

首先转化成更多的东西一样:

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

由于的GroupBy排序后发生,它有效地破坏了排序。

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

+1

似乎不是:http://stackoverflow.com/questions/1452507/linq-to-objects-does-groupby-preserve-order-of-elements –

+0

@DavidB:这对于LINQ to Objects来说是正确的,但不一定是其他的LINQ来源。请参阅Queryable.GroupBy的文档,并注意未指定:http://msdn.microsoft.com/en-us/library/bb549270.aspx –

+0

当然可以。 OP没有指定什么查询源。由于它不是DataContext或ObjectContext或DBContext,我推测LinqToObjects。你是对的 - 这是一个假设。 –

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; 
+0

David B - 感谢您的代码示例。这当然有助于我理解在查询语法和方法语法中使查询工作的必要条件。 –

相关问题