0

各行にコンマで区切られた複数の名前を持つデータベース列があります。すべての名前を含むデータ テーブルを作成しようとしていますが、重複はありません。

現在、リストにはデータが入力されていますが、重複した名前が引き続き表示されます。

私のコードは次のとおりです。

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

どんな助けでも大歓迎です、ありがとう。

4

2 に答える 2

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

そしていくつかのサンプルフィドル

于 2013-02-16T18:14:31.487 に答える
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)
于 2013-02-16T18:08:32.797 に答える