从读取器填充的阵列中删除重复项

时间:2013-02-16 18:03:18

标签: c# sql arrays sqldatareader

我有一个数据库列,每行有几个逗号分隔的名称。我正在尝试填充包含所有名称但没有重复项的数据表。

目前列表已填充,但仍会出现重复的名称。

我的代码是:

while (reader.Read())
        {
            string[] array = reader[0].ToString().Split(',');
            string[] unique = array.Distinct().ToArray();
            foreach (string s in unique)
                dt.Rows.Add(s);
        }

非常感谢任何帮助,谢谢。

2 个答案:

答案 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)