如何使用Linq对项目进行分组和求和

c7rzv4ha  于 2023-07-31  发布在  其他
关注(0)|答案(3)|浏览(111)

我在C# List对象中有以下格式的数据:

Id  Value
1   5
2   3
3   -2
1   27
2   0
3   1
1   -4

字符串
我想创建一个三维列表从这些数据格式如下:

Id  Count  TotalValue
1   3      28
2   2      3
3   2      -1


我不确定LINQ中使用的语法来实现这一点,有人可以帮助吗?

dddzy1tm

dddzy1tm1#

你可以用这个

var result = data.GroupBy(item => item.Id)
    .Select(group => new
    {
        Id = group.Key,
        Count = group.Count(),
        TotalValue = group.Sum(item => item.Value)
    })
    .ToList();

字符串

yhived7q

yhived7q2#

首先,您需要使用GroupBy,然后创建一个新的对象,该对象接受每个组并计算(CountSum)需要从它们中获得的值:
DotNetFiddle Example

using System;
using System.Collections.Generic;
using System.Linq;
                    
public class Program
{
    public static void Main()
    {
        var source = new List<(int Id, int Value)>
        {
            (1, 5),
            (2, 3),
            (3, -2),
            (1, 27),
            (2, 0),
            (3, 1),
            (1, -4),
        };
        
        var computed = source
         .GroupBy(x => x.Id)
         .Select(x => new {Id = x.Key, Count = x.Count(), TotalValue = x.Sum(s => s.Value)})
         .ToList();
        
        foreach(var value in computed)
        {
            Console.WriteLine($"{value.Id} {value.Count} {value.TotalValue}");
        }
    }
}

字符串
输出量:
1328
二二三
32 - 1

hmae6n7t

hmae6n7t3#

让我用一个元组来表示一个对象

var x = new List<(int Id, int Value)>();
            
var y = x.GroupBy(x => x.Id).Select(_ => new { Id = _.Key, Count = _.Count(), TotalValue = _.Sum(i => i.Value) });

字符串

相关问题