от
У меня есть выражение LINQ, которое выглядит примерно так
    Dim DataRowDueTo = From row In DataTableDueTo.AsEnumerable
                       Where row.Field(Of UInt32)("Transaction") = 1 And {"A", "B", "C"}.Contains(row.Field(Of String)("Module"))
                       Group By x = New With {Key .CustID = row.Field(Of UInt32)("CustID"), Key .Module = row.Field(Of String)("Module")} Into g = Group
                       Select New With {
                       .CustID = x.CustID,
                       .Module = x.Module,
                       .Sum= g.Sum(Function(r) r.Field(Of Decimal)("Amount"))
                       }

    ''DataTableDueToFinal is a datatable i have precreated with columns (CustID,Module and Sum)
    For Each grp In DataRowDueTo
        DataTableDueToFinal.Rows.Add(grp.CustID, grp.Module, grp.Sum)
    Next
По существу, у меня есть набор данных (из DataTable), который я
GROUP BY
2 колонки (
CustID
и
Module
) фильтруют с использованием
Where
по
TransactionSource
и
Module
. Полученные результаты будут выглядеть примерно так
 

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

    Dim DataRowDueTo = DataTableDueTo.AsEnumerable().Where(Function(w) w.Field(Of UInt32)("Transaction") = 1 And {"A", "B", "C"}.Contains(w.Field(Of String)("Module"))) _
                                                          .GroupBy(Function(row) {row.Field(Of UInt32)("CustID"), row.Field(Of String)("Module")})
          ''DataTableDueToFinal is a datatable i have precreated with columns (CustID,Module and Sum)
    For Each grp In DataRowDueTo
        DataTableDueToFinal.Rows.Add(grp.Key(0), grp.Key(1), grp.Sum(Function(row) row.Field(Of Decimal)("Amount")))
    Next
Кто-нибудь может указать, где я ошибся? Спасибо за ваше время и внимание.              

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

1 Ответ

0 голосов
от
Похоже, это может работать:
Dim DataRowDueTo = DataTableDueTo.AsEnumerable().Where(Function(w) w.Field(Of UInt32)("Transaction") = 1 And {"A", "B", "C"}.Contains(w.Field(Of String)("Module"))) _
                                                      .GroupBy(Function(row) New With {KEY .CustID = row.Field(Of UInt32)("CustID"),Key .Module = row.Field(Of String)("Module")})
      ''DataTableDueToFinal is a datatable i have precreated with columns (CustID,Module and Sum)
For Each grp In DataRowDueTo
    DataTableDueToFinal.Rows.Add(grp.Key.CustID, grp.Key.Module, grp.Sum(Function(row) row.Field(Of Decimal)("Amount")))
Next
    
...