Vb.net 使用linq使用datatable按值范围分组
我有一个数据表,其中填充了如下值:Vb.net 使用linq使用datatable按值范围分组,vb.net,linq,Vb.net,Linq,我有一个数据表,其中填充了如下值: Volume | Count 100 | 2 115 | 3 165 | 1 200 | 10 我有一个包含如下值的范围列表:{50100150200} 我想按体积范围计算,比如:从50-100,100-150。因此,我预计结果如下: Volume | Count 50-100 | 2 100-150 | 5 150-200 | 11 这就是我所做的: Dim tmpDt as New Dat
Volume | Count
100 | 2
115 | 3
165 | 1
200 | 10
我有一个包含如下值的范围列表:{50100150200}
我想按体积范围计算,比如:从50-100,100-150。因此,我预计结果如下:
Volume | Count
50-100 | 2
100-150 | 5
150-200 | 11
这就是我所做的:
Dim tmpDt as New DataTable
Dim tmpDt = New DataTable()
tmpDt.Columns.Add("Volume")
tmpDt.Columns.Add("Count")
Dim dr As DataRow
dr = tmpDt.NewRow
dr("Volume") = 100
dr("Count") = 2
tmpDt.Rows.Add(dr)
dr = tmpDt.NewRow
dr("Volume") = 115
dr("Count") = 3
tmpDt.Rows.Add(dr)
dr = tmpDt.NewRow
dr("Volume") = 165
dr("Count") = 1
tmpDt.Rows.Add(dr)
dr = tmpDt.NewRow
dr("Volume") = 200
dr("Count") = 10
tmpDt.Rows.Add(dr)
Dim ranges As List(Of Integer) = New List(Of Integer) From {50, 100, 150, 200}
Dim result = ranges.Select(Function(r) New With {Key.Volume = r, .Count = tmpDt.AsEnumerable.Where(Function(x) x.Field(Of Decimal)("Volume") >= r).Count()})
linq的结果给出了正确的计数,但不在我预期的范围内。
我得到的结果低于我想要的
Volume | Count
50 | 16
100 | 16
150 | 11
我想知道这是否可以使用Linq
谢谢我想明白了。以下是显示范围和计数的完整查询:
Dim result = ranges.Select(Function(r) New With {Key .ADTVolume = r, _ .Count = tmpDt.AsEnumerable.Where(Function(x) x.Field(Of Decimal)("ADTVolume") >= r _ And x.Field(Of Decimal)("ADTVolume") <= ranges.Where(Function(r2) r2 > r).FirstOrDefault).Count()})
Dim result=ranges.Select(函数(r)New,带有{Key.ADTVolume=r,0.Count=tmpDt.AsEnumerable.Where(函数(x)x.Field(十进制)(“ADTVolume”)>=r_0和x.Field(十进制)(“ADTVolume”)r.FirstOrDefault.Count())
是的。据我所知,您希望获得每个值范围的计数。我说得对吗?是的,你说得对。您有什么建议吗?如果卷位于边框上(如100),您可以对计数进行两次计数,例如在50-100和100-150之间。像“lower bound”这样的范围定义嘿,伙计们,我弄明白了:下面是查询:Dim result=ranges.Select(Function(r)New With{Key.ADTVolume=r,u.Count=tmpDt.AsEnumerable.Where(Function(x)x.Field(十进制的)(“ADTVolume”)>=r_u和x.Field(十进制)(“ADTVolume”)r.FirstOrDefault.Count())