LINQ на datatable для суммирования нескольких столбцов vb.net - PullRequest
0 голосов
/ 12 июня 2018

Кто-нибудь знает, возможно ли суммировать несколько столбцов таблицы данных или таблицы данных на основе заданных критериев для другого столбца?Короче говоря, у меня есть таблица, которая выглядит (просто) так:

Ph Length  Start
A     10     1.5
B     14     2
C     9      1.8
A     11     1.4

и т. д. *

Что я хотел бы сделать, так это понять, возможно лииспользовать LINQ для суммирования на основе "Ph" для столбцов длины и начала в одном запросе?Или мне нужно написать по одному для каждого письма?

По сути, результат должен быть A = 21, 2.9.B = 14, 2. C = 9, 1,8

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

1 Ответ

0 голосов
/ 12 июня 2018

Чтобы объединить строки в LINQ на основе значений ключевых столбцов, вы используете GroupBy.

Получив группы строк, вы можете суммировать интересующие столбцы.

В запросе LINQСинтаксис понимания,

Dim sums = From dr In dt.AsEnumerable()
           Group dr By Ph = dr.Field(Of String)("Ph") Into drg = Group
           Select New With {
               .Ph = Ph,
               .LengthSum = drg.Sum(Function(dr) dr.Field(Of int)("Length")),
               .StartSum = drg.Sum(Function(dr) dr.Field(Of Double)("Start"))
           }

Если вы предпочитаете лямбда-синтаксис,

Dim sums2 = dt.AsEnumerable() _
              .GroupBy(Function(dr) dr.Field(Of String)("Ph")) _
              .Select(Function(drg) New With {
                  .Ph = drg.Key,
                  .LengthSum = drg.Sum(Function(dr) dr.Field(Of Integer)("Length")),
                  .StartSum = drg.Sum(Function(dr) dr.Field(Of Double)("Start"))
              })

В обоих случаях результатом запроса будет IEnumerable анонимного объекта, который я создал в select / Select.Вы можете создать класс или выполнить дополнительную работу, создать новый DataTable для хранения ответа или использовать клон существующего DataTable.

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