首页 > 解决方案 > Concat 多个 linq 查询的结果并将重复的值相加

问题描述

我有这个函数,我调用 datagridview 内容更改和工作。

这是从另一列获取具有值的名称列表,并将结果显示在另一个 dgv 中。

例子:

group | quantity

chest | 2
back  | 5
legs  | 7

问题是,当我在多行或 dgv 中有相同的组时,我在结果 datagridview 中获得了多个条目。我想要做的是在两次输入同一组时对值求和。

所以在这种情况下:

group | quantity

legs | 2
arms  | 5
legs  | 7

会改变:

group | quantity

legs  | 9
arms  | 5

我尝试过 union 而不是 concat 但这会删除重复项,所以如果我有 2 个具有相同值的条目,我会丢失重复值。

这里完整的功能代码:

private void seriesettimanali()
    {

        // quantity for group of datagridview1
        var Sums = dataGridView1.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) //inserire colonna gruppo

        .Select(g => new { Group = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });


        // quantity for group of datagridview2
        var Sums2 = dataGridView2.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) 

        .Select(g => new { Group = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });

        // quantity for group of datagridview3
        var Sums3 = dataGridView3.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) 

        .Select(g => new { Group = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });

        // quantity for group of datagridview4
        var Sums4 = dataGridView4.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) 

        .Select(g => new { Group = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });

        // quantity for group of datagridview5
        var Sums5 = dataGridView5.Rows.Cast<DataGridViewRow>()
          .Where(row => row.Cells[7].Value != null)
        .GroupBy(row => row.Cells[7].Value.ToString()) 

        .Select(g => new { Group = g.Key, Sum = g.Sum(row => Convert.ToInt32(row.Cells[1].Value)) });

        
        var resultSum1 = Sums.Concat(Sums2);
        var resultSum2 = resultSum1.Concat(Sums3);
        var resultSum3 = resultSum2.Concat(Sums4);
        var resultSum4 = resultSum3.Concat(Sums5);

        

        dataGridView6.DataSource = resultSum4.ToList();
    }

我能怎么做?

标签: c#linq

解决方案


好的,我找到了解决方案:

var rs = resultSum4
                .GroupBy(w => w.User)
                .Select(g => new { User = g.Key, Sum = g.Sum(x => x.Sum) });

推荐阅读