我在.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 - 为什么当我在调试模式下运行查询并处理它时,我收到此消息'期望类型'?
感谢大家
答案 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