Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按列表合并分组和无键值求和_C#_.net - Fatal编程技术网

C# 如何按列表合并分组和无键值求和

C# 如何按列表合并分组和无键值求和,c#,.net,C#,.net,例如,我有一个分组列表: List<Cl> list = new List<Cl>() { new Cl() { vi = 1, vs = "q", am = 20 }, new Cl() { vi = 1, vs = "w", am = 30 }, new Cl() { vi = 2, vs = "w", am = 40 }, new Cl() { vi =

例如,我有一个分组列表:

List<Cl> list = new List<Cl>()
        {
            new Cl() { vi = 1, vs = "q", am = 20 },
            new Cl() { vi = 1, vs = "w", am = 30 },
            new Cl() { vi = 2, vs = "w", am = 40 },
            new Cl() { vi = 1, vs = "q", am = 50 }
        };
groups = list.GroupBy(b => new { b.vi, b.vs }).ToList();
不使用字典或KeyValuePair就可以实现它吗


我将非常感谢您的帮助。

您可以尝试以下方法:

class Key
{
    public int Vi { get; set; }
    public string Vs { get; set; }

    public Key(int vi, string vs)
    {
        Vi = vi;
        Vs = vs;
    }
}

var result = groups = list.GroupBy(b => new { b.vi, b.vs })
                          .Select(gr=> new { Key = Key(gr.vi,gr.vs)
                                           , Value = gr.Sum(x=>x.am)})
                          .ToList();
var groups = list.GroupBy(b => new { b.vi, b.vs })
                 .Select(g => new { g.Key, am = g.Sum(s => s.am)})
                 .ToList();
首先
GroupBy()
,然后
Sum()
向上计算各组的
am

List<Cl> groups = list.GroupBy(b => new { b.vi, b.vs })
                      .Select(x => new Cl() { vi = x.Key.vi,
                                              vs = x.Key.vs, 
                                              am = x.Sum(y => y.am) }).ToList();
List groups=List.GroupBy(b=>new{b.vi,b.vs})
.Select(x=>newcl(){vi=x.Key.vi,
vs=x.Key.vs,
am=x.Sum(y=>y.am)}).ToList();
像这样尝试:

class Key
{
    public int Vi { get; set; }
    public string Vs { get; set; }

    public Key(int vi, string vs)
    {
        Vi = vi;
        Vs = vs;
    }
}

var result = groups = list.GroupBy(b => new { b.vi, b.vs })
                          .Select(gr=> new { Key = Key(gr.vi,gr.vs)
                                           , Value = gr.Sum(x=>x.am)})
                          .ToList();
var groups = list.GroupBy(b => new { b.vi, b.vs })
                 .Select(g => new { g.Key, am = g.Sum(s => s.am)})
                 .ToList();