vb.net linq groupby 动态分组汇总
最近有一个需要需要对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>
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 确实不错,需要深入学习才行.