2013-02-16 86 views
0

我有一個數據庫列,每列中有多個名稱用逗號分隔。我試圖填充包含所有名稱但沒有重複的數據表。從讀取器填充的陣列中刪除重複項

目前該列表已填充,但重名仍然出現。

我的代碼是:

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

任何幫助將不勝感激,謝謝。

+1

您的查詢的外觀如何?改變查詢返回Distinct Rows是不是更容易? – MethodMan 2013-02-16 18:04:27

+0

不同的源行可以包含重複的問題嗎?例如,「A,B,B,C」和「A,D,D,F,F」加上A,B,C,A,D, F'(重複'A')? – dtb 2013-02-16 18:07:36

+0

不同的行可能會有多個用逗號分隔的名稱,如:name1,name2,name3。但是另一列可能包含名稱的副本,例如:name1,name4。名字1將被返回兩次。 – user2078938 2013-02-16 18:08:29

回答

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) 
+0

謝謝!這工作! – user2078938 2013-02-16 18:11:11

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

+0

謝謝。這個方法很好理解。我已經實現了Hossein Narimani Rad的答案,它已經在c#端更容易修復。再次感謝。 – user2078938 2013-02-16 18:18:54