2013-02-28 90 views
3

我是C#中的初學者,所以我有一個問題,我的數據庫中有很多名字我的問題是如何使腳本顯示名稱的數據LINQ中雙打? 下面一個例子:如何使用LINQ刪除陣列中的重複項

string[] names = {hello, hello, stack, stack, overflow, overflow}; 

我不知道如何做到這一點的人可以創建一個簡單的腳本,顯示它是如何做的。我可以自己解決其他問題。

回答

3

我想,這也應該工作;

names.Distinct().ToList().ForEach(n => Console.WriteLine(n)); 
+0

不要以爲你需要'.ToList()'。 – 2013-02-28 01:08:31

+0

@FabianTamp:我在linq鍵盤上沒有'ToList()'進行測試。它說''System.Collections.Generic.IEnumerable '不包含'ForEach'的定義,並且沒有擴展方法'ForEach'接受類型'System.Collections.Generic.IEnumerable '的第一個參數' – Kaf 2013-02-28 08:38:48

+1

ForEach()在列表上,而不在IEnumerable 上,所以如果您想使用ForEach方法,則需要.ToList()。或者,你可以像平常一樣寫一個foreach(){}。 – 2013-02-28 09:39:45

7

在這裏你去:

string[] names = {"hello", "hello", "stack", "stack", "overflow", "overflow"}; 
var distinctNames = names.Distinct(); 

foreach(String distinctName in distinctNames) 
    Console.WriteLine(distinctName); 
1

您可以使用Distinct

試試這個:

string[] names = {"hello", "hello", "stack", "stack", "overflow", "overflow"}; 
var uniqueNames = (from c in names select c).Distinct(); 
foreach(String s in uniqueNames) Console.WriteLine(uniqueNames); 
+0

非常感謝我所需要的。 – user2117650 2013-02-28 00:15:17

0

儘管一些答案被標記爲接受,我想我可以添加有關意想不到的問題一些重要的信息,你可以在情況有你有在數組對象,你需要區分遇到要依據關於該對象的某些屬性。

LINQ的鮮明()函數可能無法在這種情況下正常工作,所以你應該使用的解決方法是這樣的(這給你同樣的結果):

var elems = someArray.GroupBy(x=>x.RpopertyToCompare).Select(y=>y.First()); 

你可以在這裏閱讀更多:http://blog.jordanterrell.com/post/LINQ-Distinct()-does-not-work-as-expected.aspx

0
var duplicates = suppliers_arr 
    .GroupBy(i => i) 
    .Where(g => g.Count() > 1) 
    .Select(g => g.Key); 
if(duplicates.Count() > 0){ 
    foreach (var d in duplicates) 
    { 
     ModelState.AddFormError(string.Format("{0} is duplicated",d.ToString())); 
    } 
}else{ 
    //no duplicates 
}