使用linq通过数据表进行分组

时间:2015-04-20 20:28:43

标签: vb.net linq

我有一个数据表填充了以下值:

Volume | Count
  100  |    2
  115  |    3
  165  |    1
  200  |    10

我有一个范围列表包含如下值:{50,100,150,200} 我想计算音量范围如下:从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?

由于

1 个答案:

答案 0 :(得分:0)

我明白了。这是一个显示范围和计数的完整查询:

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