我有一个数据库列,每行有几个逗号分隔的名称。我正在尝试填充包含所有名称但没有重复项的数据表。
目前列表已填充,但仍会出现重复的名称。
我的代码是:
while (reader.Read())
{
string[] array = reader[0].ToString().Split(',');
string[] unique = array.Distinct().ToArray();
foreach (string s in unique)
dt.Rows.Add(s);
}
非常感谢任何帮助,谢谢。
答案 0 :(得分:1)
以下是使用CROSS APPLY
的数据库解决方案:
CREATE TABLE YourTable (YourColumn varchar(100));
INSERT INTO YourTable VALUES ('John,Jack,Jill,John'),
('Mike,John,Jack,Jill,John');
SELECT DISTINCT
Split.a.value('.', 'VARCHAR(100)') AS UniqueName
FROM
(SELECT
CAST ('<M>' + REPLACE(YourColumn, ',', '</M><M>') + '</M>' AS XML) AS String
FROM YourTable
) AS A
CROSS APPLY String.nodes ('/M') AS Split(a)
产生以下结果:
UNIQUENAME
Jack
Jill
John
Mike
还有一些示例fiddle。
答案 1 :(得分:0)
试试这个
List<string> distinctValues = new List<string>();
while (reader.Read())
{
string[] unique = reader[0].ToString().Split(',').Distinct().ToArray();
foreach (string s in unique)
if (!distinctValues.Contains(s))
distinctValues.Add(s);
}
foreach (string s in distinctValues)
dt.Rows.Add(s)