Vb.net LINQ 语法使用方法语法按多列分组

Vb.net LINQ Syntax Group By Multiple Columns using Method Syntax

我有一个看起来像这样的 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

本质上,我有一组数据(来自数据表),我 GROUP BY 2 列(CustIDModule)使用 Where 过滤 TransactionSourceModule

生成的结果看起来像这样

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

谁能指出我哪里出错了?感谢您的时间和考虑。

看起来这可能有效:

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