Чтобы объединить строки в 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
.