Суммируйте равные данные в DataTable и передавайте их в новый DataTable C # - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть запрос SELECT:

SELECT * FROM XXXXX

То, что я получаю, я сохраняю в DataTable, допустим, что это DataTable выглядит следующим образом (отражение таблицы):

code       description     amount     unit    prize
----------------------------------------------------
0001          papaya        100,5      KG      75
0002          mango          50        KG      50
0001          papaya        200,5      KG      75

Как я могу пройти через DataTable и суммировать все «суммы», если они имеют одинаковый код, и передать его в новый тип данных, подобный этому?

code        description          amount     unit    prize
----------------------------------------------------------
0001          papaya               301      KG         75
0002          mango                 50      KG         50

Я пыталсячто-то вроде этого, но я немного потерял (я думаю, это не правильный способ сделать это):

var query = from row in dt.AsEnumerable()
            group row by row.Field<string>("code") into g
            select new 
                   {
                        cod_parte = g.Key,
                        descripcion = g.First().GetChildRows("descripcion").ToString(),
                        cantidad = g.Sum(x => x.Field<int>("cantidad")),
                        unidad = g.First().GetChildRows("unidad").ToString(),
                        precio = Convert.ToDouble(g.First().GetChildRows("precio"))
                   };

DataTable dtResult = new DataTable();
dtResult = query.CopyToDataTable();

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Вы можете сделать что-то вроде этого:

DataTable table = new DataTable();
        table.Columns.Add("Code", typeof(string));
        table.Columns.Add("Description", typeof(string));
        table.Columns.Add("Amount", typeof(int));
        table.Columns.Add("Unit", typeof(string));
        table.Columns.Add("Prize", typeof(double));

        // Here we add five DataRows.
        table.Rows.Add("0001", "papaya", "100", "KG", 75);
        table.Rows.Add("0002", "mango", "50", "KG", 50);
        table.Rows.Add("0001", "papaya", "200", "KG", 75);

        var rows = table.AsEnumerable().GroupBy(row => row.Field<string>("Code")).Select(g =>
        {
            var row = table.NewRow();

            row["Code"] = g.Key;
            row["Description"] = row.Field<string>("Description");
            row["Amount"] = g.Sum(y => y.Field<int>("Amount"));
            row["Unit"] = row.Field<string>("Unit");
            row["Prize"] = row.Field<double?>("Prize") == null ? 0 : row.Field<double>("Prize");
            return row;
        }).CopyToDataTable();

        foreach (var data1 in rows.Rows)
        {
            Console.WriteLine(data1.ToString());
        }
0 голосов
/ 22 февраля 2019

Этого легко достичь, используя System.Linq

Используя приведенный выше пример таблицы данных, вы должны сначала сгруппировать код, а затем выбрать новый объект с ключом и суммой для каждого элемента в группировке.

Этого можно достичь, используя приведенный ниже код

// Fill our list
var list = new List<Item>
{
    new Item {Code = 1, Price = 2},
    new Item {Code = 2, Price = 2},
    new Item {Code = 1, Price = 2}
};

// Perform LINQ
var result = list.GroupBy(x => x.Code).Select(x => new
{
    Code = x.Key,
    Sum = x.Sum(z => z.Price)
}).ToList();

Или следуя примерам таблицы данных (мой испанский не 100%)

var query = dt.AsEnumerable().GroupBy(x => x.Field<string>("code")).Select(x => new
{
    cod_parte = x.Key,
    cantidad = x.Sum(z => z.Field<int>("cantidad")),
}).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...