.net 使用linq从数据表中删除逗号分隔的值
这是我的.net 使用linq从数据表中删除逗号分隔的值,.net,vb.net,linq,.net,Vb.net,Linq,这是我的DataTable结构: 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.A
DataTable
结构:
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"))
我得到的结果是:
结果=预期的类型
我做错了什么?在
选择语句中,您需要创建匿名类的实例
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)
正如法比奥指出的,关键是为返回创建一个Anon类型。但是可以通过在GroupBy
方法中对其进行操作来跳过组选择
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巴黎,伦敦
没有兄弟,同样的问题!!我刚刚用你的代码更新了快照。你需要将“areaid”列的值强制转换为整数。在您的代码中,您将其强制转换为字符串
,并正确地提供列名作为字符串“areaid”
,我认为这不是问题所在。我改变了它,但仍然没有成功。顺便说一下,当我从select中删除第二个冒号“areaName”时,我发布的查询返回了数据。所以我猜selectmy bad有点问题,你的解决方案非常有效!!!非常感谢。。我所做的唯一更改是.AreaId=group.Select(函数(行)row.Field(字符串)(“AreaId”),在使用我使用的值时。first@Sameer,AreId是组的一个键,因此可以在没有group的情况下访问它。选择…