如何将某些字段分组并用epplus对其他字段求和

时间:2019-03-04 21:32:10

标签: c# excel epplus

我有一个Excel数据列表,我想对其进行查询。我希望epplus在第一列中标识复制的数据,并对复制字段中第二列中的值求和。如果这是我的数据:

 Name   Value
 Ali    12  
 Hasan  4
 Hasan  3
 Ali    3

我想用epplus做到这一点:

 Name   Value
 Ali    15  
 Hasan  7

我找到了Select multiple fields group by and sum,但是使用epplus并没有做到这一点。谁能帮我?这是我在epplus中的代码。

string fileman = Path.Combine(Path.GetTempPath(), "MyExceldata.xlsx");
using (ExcelPackage package = new ExcelPackage(new FileInfo(fileman)))
                {
                    ExcelWorksheet sheet = package.Workbook.Worksheets["Data"];
                    for (int i = 1; i <= sheet.Dimension.Rows, i++)
                    {
                        //column of name //--running my query in epplus
                        sheet.Cells[i,1].Value
                        //column of value //--running my query in epplus
                        sheet.Cells[i, 2].Value

                    }
                    //--running my query in epplus
                    package.Save();
                }

1 个答案:

答案 0 :(得分:1)

链接的答案为您提供了所需的信息,但是也许我们需要在上面您看到的特定上下文中查看它。

让我们定义一个类来保存您的模型:

class Item {
    public string Name {get;set;}
    public int Value {get;set;}
}

然后,根据您的问题,我们将获得示例数据列表:

var items = new List<Item>{
    new Item { Name = "Ali", Value = 12 },
    new Item { Name = "Hasan", Value = 4 },
    new Item { Name = "Hasan", Value = 3 },
    new Item { Name = "Ali", Value = 3 }
};

我们可以运行的LINQ查询执行以下操作:

var grouped = items.GroupBy(g => g.Name)
    .Select(s => new Item
    { 
        Name = s.Key,
        Value = s.Sum(x => x.Value)
    });

也就是说:

  • 按名称将所有项目分组(因为这是您的唯一标识符)
  • 从分组中,我们将为每个唯一标识符选择一个新的Item
  • 我们将对属于该组的项目的值求和

如果我们检查grouped的内容,它将包含:

Name        Value
----        -----
Ali         15
Hasan       7