试试他的台词
Dim Amount As Decimal = T.Rows.OfType(Of DataRow).GroupBy(Function(X) CStr(X("RoomNo"))).Sum(Function(Room) Room.Take(Room.Count - 1).Sum(Function(X) pDec(X("Amount"))))
但关于RoomNo列的名称,您的问题并不清楚。根据你的问题,这个问题有一些假设。
当房间号在不同的时段重复时,它将不起作用。或者当行未按日期排序时。
此解决方案未以任何方式进行优化。它只是计算值。
房价是否因日期而异?房价*住宿天数是更好的解决方案。无论如何,你应该在晚上而不是白天工作。
编辑:
完整代码版本
Public Sub Test()
Dim R As DataRow, i As Integer
Using T As New DataTable
T.Columns.Add("RoomNo", GetType(String))
T.Columns.Add("Amount", GetType(Decimal))
For i = 1 To 3
R = T.NewRow
R("RoomNo") = "101"
R("Amount") = 1800
T.Rows.Add(R)
R = T.NewRow
R("RoomNo") = "102"
R("Amount") = 3000
T.Rows.Add(R)
Next
Dim Amount As Decimal = T.Rows.OfType(Of DataRow).GroupBy(Function(X) CStr(X("RoomNo"))).Sum(Function(Room) Room.Take(Room.Count - 1).Sum(Function(X) CDec(X("Amount"))))
Debugger.Break()
End Using
End Sub