Группировка синтаксиса LINQ Vb.net по нескольким столбцам с использованием синтаксиса метода - PullRequest
1 голос
/ 04 июля 2019

У меня есть выражение 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.

Полученные результаты будут выглядеть примерно так

+--------+--------+-----+
| CustID | Module | Sum |
+--------+--------+-----+
| 1      | A      | 50  |
+--------+--------+-----+
| 1      | B      | 45  |
+--------+--------+-----+
| 2      | A      | 23  |
+--------+--------+-----+
| 3      | A      | 234 |
+--------+--------+-----+
| 3      | B      | 76  |
+--------+--------+-----+

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

    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 Ответ

1 голос
/ 04 июля 2019

Похоже, это может сработать:

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
...