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())