srno. areaid areaName
1 1 Mumbai
2 1 Delhi
3 1 New York
4 2 Sydney
我想查询它,结果应该是:
srno. areaid areaName
1 1 Mumbai,Delhi, New York
2 2 Sydney
这是我的疑问:
Dim grouped = From row In a.AsEnumerable()
Group row By id = row.Field(Of String)(areaid) Into Group
Select id, areaName = String.Join(",", From i In Group Select i.Field(Of String)("areaName"))
我得到了结果:
结果=预期类型。
我做错了什么?
答案 0 :(得分:3)
Fabio指出的关键是为回归创建一个Anon类型。但是可以通过在GroupBy
方法中对其进行操作来跳过组SELECT。
Dim grouped = dt.AsEnumerable().
GroupBy(Function(row) row.Field(Of Integer)("AreaId"),
Function(key, values) New With {
.Id = key,
.Names = String.Join(",", values.
Select(Function(q) q.Field(Of String)("AreaName")))
}
).OrderBy(Function(j) j.Id)
For Each item In grouped
Console.WriteLine("{0} {1}", item.Id, item.Names)
Next
我在表格中添加了一些元素(2组不是一个好的测试),并且序列不那么有序。结果:
1孟买,德里,纽约
2悉尼
3巴黎,伦敦
答案 1 :(得分:1)
在Select
语句中,您需要创建匿名类的实例
Dim grouped =
a.AsEnumerable().
GroupBy(Function(row) row.Field(Of Integer)("areaid")).
Select(Function(group, areaId)
Return New With
{
.AreaId = areaId,
.AreaNames = String.Join(",", group.Select(Function(row) row.Field(Of String)("areaName")))
}
End Function)