在GroupTable中的多列中使用Group By

时间:2014-08-22 10:40:53

标签: .net linq datatable

我在.net中遇到Linq查询问题。 我将这个简单的表存储在名为DBToUse的DataTable中。 在我想要执行的查询之前,该表已经被主单元过滤。

PrimaryUnit - ErrorCode - ErrorDescription - Count
    Unit3         2           axe 3 
    Unit3         1           no source
    Unit3         1           axe 1
    Unit3         1           axe 2
    Unit3         1           axe 2 
    Unit3         2           axe 3
    Unit3         3           axe 3

我想使用Group By。

子句来使用下表
Error Code and Description - Count
    2 - axe 3                  2
    1 - axe 2                  2
    3 - axe 3                  1
    1 - axe 1                  1
    1 - no source              1

我开始这个简单的查询。

Dim query = From row In DBToUse.AsEnumerable()
                Select PU = DBToUse.Columns("PrimaryUnit"), C = DBToUse.Columns("Count"), EC = DBToUse.Columns("ErrorCode"), ED = DBToUse.Columns("ErrorDescription")
                Group By EC Into prova = Group

1 - 任何人都可以帮我在两栏中使用Group By吗?

2 - 为什么当我在调试模式下运行查询并处理它时,我收到此消息'期望类型'?

感谢大家

1 个答案:

答案 0 :(得分:1)

使用匿名类型,这应该有效:

Dim errorGroups = From row In DBToUse
                  Let puError = New With {
                    Key .PrimaryUnit = row.Field(Of String)("PrimaryUnit"),
                    Key .ErrorCode = row.Field(Of String)("ErrorCode"),
                    Key .ErrorDescription = row.Field(Of String)("ErrorDescription")
                  }
                  Group row By puError Into puErrorGroup = Group
                  Order By puErrorGroup.Count() Descending

Dim aggregatedTable As DataTable = DBToUse.Clone() ' empty table, same columns '
For Each grp In errorGroups
    Dim row = aggregatedTable.Rows.Add()
    row.SetField("PrimaryUnit", grp.puError.PrimaryUnit)
    row.SetField("ErrorCode", grp.puError.ErrorCode)
    row.SetField("ErrorDescription", grp.puError.ErrorDescription)
    row.SetField("Count", grp.puErrorGroup.Count())
Next