Linq查询除了前三名以外的所有组

时间:2016-01-22 20:37:36

标签: c# linq

我在Linq中有以下代码,我想知道如何制作它以便将前三名旁边的所有其他代码分组到另一个类别中并汇总其数量。

var list = (from t in sortedCollection.DataItem
           orderby t.volume
           select t).Take(3);

1 个答案:

答案 0 :(得分:3)

您需要使用Skip忽略前三名,并将其余内容分组为:

var list = (from t in sortedCollection.DataItem
           orderby t.volume
           select t).Skip(3);

从评论中,您似乎只想在跳过前3条记录后得到特定字段的总和。

var sum = (from t in sortedCollection.DataItem
           orderby t.volume
           select t).Skip(3).Sum(r=> r.VOLUME);

或者使用完整的方法语法:

var Sum = sortedCollection.DateItem.OrderBy(t => t.volume)
                    .Skip(3)
                    .Sum(r=> r.volume);

如果您需要分组,它看起来像:

使用方法语法,它应该是:

var query = sortedCollection.DateItem.OrderBy(t => t.volume)
                    .Skip(3)
                    .GroupBy(t => t.YourGroupingField);

要根据字段执行Sum,您可以执行以下操作:

var query = sortedCollection.DateItem.OrderBy(t => t.volume)
                    .Skip(3)
                    .GroupBy(t => t.YourGroupingField)
                    .Select(grp => new SqlCommand(
                    {
                        Key = grp.Key, 
                        Sum = grp.Sum(r=> r.ValueFieldForSum)
                    }));