C# Linq查询对除前三名以外的所有人进行分组

C# Linq查询对除前三名以外的所有人进行分组,c#,linq,C#,Linq,我在Linq中有以下代码,我想知道如何使它能够将前3名之外的所有其他人归为其他人类别,并对他们的数量进行汇总 var list = (from t in sortedCollection.DataItem orderby t.volume select t).Take(3); 您需要使用Skip忽略前3名,并将其余的分组如下: var list = (from t in sortedCollection.DataItem ord

我在Linq中有以下代码,我想知道如何使它能够将前3名之外的所有其他人归为其他人类别,并对他们的数量进行汇总

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

您需要使用
Skip
忽略前3名,并将其余的分组如下:

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);
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)
                    }));
要根据字段执行
求和
,可以执行以下操作:

var query = sortedCollection.DateItem.OrderBy(t => t.volume)
                    .Skip(3)
                    .GroupBy(t => t.YourGroupingField);
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)
                    }));

您需要使用
Skip
忽略前3名,并将其余的分组如下:

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);
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)
                    }));
要根据字段执行
求和
,可以执行以下操作:

var query = sortedCollection.DateItem.OrderBy(t => t.volume)
                    .Skip(3)
                    .GroupBy(t => t.YourGroupingField);
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)
                    }));

你说的“组”是什么意思?你说的“组”是什么意思?我该如何对它们进行分组?@Sean,你可以做
list.GroupBy(t=>t.YourField)
,或者在查询的末尾添加
GroupBy
,或者完全使用方法语法而不是混合查询和方法语法。但是我不想按某个字段进行分组。我想把他们都聚在一起。@Sean,嗯,什么?你所说的集体是什么意思?是否要对列表的其余部分执行字段的求和操作?是的,我要对列表的其余部分执行求和操作。我从你剩下的代码中找到了如何做到这一点。但是,生成的var列表没有我可以更改的字段名(即它不是单个数据项)。var list=(从这个.Items orderby t.VOLUME中的t选择t).跳过(3).求和(item=>item.VOLUME);我该如何对它们进行分组?@Sean,您可以执行
list.GroupBy(t=>t.YourField)
,或者在查询的末尾添加
GroupBy
,或者完全使用方法语法,而不是混合查询和方法语法。但我不想按某个字段进行分组。我想把他们都聚在一起。@Sean,嗯,什么?你所说的集体是什么意思?是否要对列表的其余部分执行字段的求和操作?是的,我要对列表的其余部分执行求和操作。我从你剩下的代码中找到了如何做到这一点。但是,生成的var列表没有我可以更改的字段名(即它不是单个数据项)。var list=(从这个.Items orderby t.VOLUME中的t选择t).跳过(3).求和(item=>item.VOLUME);