vb.net linq groupby 动态分组汇总

2013年7月29日

最近有一个需要需要对datatable进行动态分组汇总.解决方案是使用linq进行处理.

由于c#的语法与vb.net的差异,还是比较大,我也是参考了c#的写法.

 

c#

使用linq的的GroupBy进行分组时,有时分组的条件是动态的,下面是解决方法。

var q=this.dtDataBase.Rows.Cast<DataRow>().GroupBy(p=>string.Join(“\r”,condition.Select(x=>p[x].ToString()).ToArray()));

其中dtDataBase是要分组的DataTable,condition是存放要分组的字段的List<String>

 

vb.net

 

Dim tb As New DataTable
tb.Columns.Add(“a”)
tb.Columns.Add(“b”)
tb.Columns.Add(“c”, GetType(Decimal))

Dim r = tb.NewRow
r(“a”) = “a”
r(“b”) = “b”
r(“c”) = 11
tb.Rows.Add(r)

r = tb.NewRow
r(“a”) = “a”
r(“b”) = “b”
r(“c”) = 12
tb.Rows.Add(r)

r = tb.NewRow
r(“a”) = “a”
r(“b”) = “b1”
r(“c”) = 12
tb.Rows.Add(r)

Dim gs As New List(Of String)
gs.Add(“a”)
gs.Add(“b”)

Dim rows = tb.Rows.Cast(Of DataRow).GroupBy(Function(q) String.Join(vbCrLf, gs.Select(Function(x) q(x).ToString).ToArray()))

 

 
For Each g In rows
Dim list = g.ToList

Console.WriteLine(g.Key & ” —- ” & list.Count)
Debug.WriteLine(g.Key & ” —- ” & list.Count)
Next

 

 

Console.ReadKey()

 

输出结果:

a
b —- 2
a
b1 —- 1

 

linq 确实不错,需要深入学习才行.

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: vb.net linq groupby 动态分组汇总
本文的评论功能被关闭了.