Как я могу сгруппировать по некоторым полям и суммировать другие поля с epplus - PullRequest
0 голосов
/ 05 марта 2019

У меня есть список данных Excel, и я хочу выполнить запрос к нему.Я хочу, чтобы epplus идентифицировал реплицированные данные в первом столбце и суммировал значения во втором столбце в поле репликации.если это были мои данные:

 Name   Value
 Ali    12  
 Hasan  4
 Hasan  3
 Ali    3

Я хочу сделать это с помощью epplus:

 Name   Value
 Ali    15  
 Hasan  7

Я нашел Выберите несколько полей для группировки и суммируйте , но это нене делай этого с 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 голосов
/ 05 марта 2019

Связанный ответ дает вам то, что вам нужно, но, возможно, нам нужно увидеть это в конкретном контексте, который вы смотрите выше.

Давайте определим класс для хранения вашей модели:

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)
    });

Тоis:

  • Сгруппируйте все элементы по Имени (поскольку это ваш уникальный идентификатор)
  • Из группировки мы выберем новый Item для каждого уникального идентификатора
  • Суммируем значения элементов, принадлежащих группе

Если мы проверим содержимое grouped, оно будет содержать:

Name        Value
----        -----
Ali         15
Hasan       7
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...