从datatable中删除重复项并添加值vb.net
我有一个datatable,有两列,名称列中有重复记录,要删除重复列,但不删除重复列的值,需要附加“,” 我希望输出为从datatable中删除重复项并添加值vb.net,vb.net,Vb.net,我有一个datatable,有两列,名称列中有重复记录,要删除重复列,但不删除重复列的值,需要附加“,” 我希望输出为 Name Value Arun x,c,w Kumar j,k,m Jai a,b Balu a,c 试试这个 SELECT Name,Value + ',' + value FROM Table1 Group By Name,Value 您可以尝试以下方法(注释中说明了该方法的工作原理): 如果第一列中永远不会有重复的值,那么最好将该列定
Name Value
Arun x,c,w
Kumar j,k,m
Jai a,b
Balu a,c
试试这个
SELECT Name,Value + ',' + value
FROM Table1
Group By Name,Value
您可以尝试以下方法(注释中说明了该方法的工作原理):
如果第一列中永远不会有重复的值,那么最好将该列定义为主键。尝试通过编码将功能添加到数据库中,而实际上可以直接从数据库中获取该功能是一个很大的错误。您的datatable数据是否来自数据库??然后最好的方法是在SELECT语句中进行操作…使用SELECT DISTINCT。我从excel文件获取此记录,我从导入到excel DataGridViews我从excel文件获取此记录,我从导入到excel DataGridViews显示错误:类型为'system.collections.generic.list(字符串)的值'无法转换为一维数组。“nameGroup.Select(函数(x)x.Field(字符串)(“值”)).ToList()”您使用的.NET版本是什么?尝试使用
.ToArray()
更改.ToList()
String.Join
在旧版本的.NET中只能接收数组,不能与List一起使用。使用framework 3.5,将toList()更改为ToArray()“无法将类型为'd_u7a`1[System.String]'的对象强制转换为类型为'System.String[]”。在.Distinct()
之后添加.ToArray()
。Distinct()返回列表,所以您也需要对其进行转换。除了使用LINQ,还有其他方法吗?
SELECT Name,Value + ',' + value
FROM Table1
Group By Name,Value
Dim dt As New DataTable
'source DataTable has 2 columns : Name and Value
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Value", GetType(String))
'add 2 rows to source DataTable
dt.Rows.Add("Arun", "x,c")
dt.Rows.Add("Arun", "c,x,w")
'group rows by Name
'for each group join value by comma so "x,c" + "c,x,w" become "x,c,c,x,w"
'then split by comma and call distinct to remove duplicate chars. result: x|c|w
'join them again by comma. result: "x,c,w"
Dim query = (From row In dt
Group row By name = row.Field(Of String)("Name") Into nameGroup = Group
Select New With {
.Name = name,
.Value = String.Join(",", String.Join(",", nameGroup.Select(Function(x) x.Field(Of String)("Value")).ToList()).Split(",").Distinct())
}
).ToList()
Dim dt2 As New DataTable
dt2.Columns.Add("Name", GetType(String))
dt2.Columns.Add("Value", GetType(String))
'add distinct data to result DataTable
For i As Integer = 0 To query.Count
dt2.Rows.Add(query(i).Name, query(i).Value)
Next