我有一个看起来像这样的 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),我使用by和过滤了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
谁能指出我哪里出错了?感谢您的时间和考虑。