如何使用LINQ从数组中删除重复项

时间:2013-02-28 00:10:35

标签: c# linq

我是C#的初学者,所以我有一个问题,我的数据库中有很多名字我的问题是如何制作显示LINQ中没有双打的名字数据的脚本? 这是一个例子:

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

我不知道如何做到这一点可以有人创建一个简单的脚本,告诉它该怎么做。我自己可以解决其余问题。

5 个答案:

答案 0 :(得分:7)

你走了:

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

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

答案 1 :(得分:3)

我认为这也应该有用;

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

答案 2 :(得分: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);

答案 3 :(得分:0)

尽管某些答案被标记为已接受,但我认为我可以添加一些关于意外问题的重要信息,您可以在阵列中有对象的情况下遇到这些信息,并且需要区别对待基于该对象的某些属性。

LINQ的Distinct()函数在这种情况下可能无法正常工作,所以你应该使用这样的解决方法(它会给你相同的结果):

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

您可以在此处阅读更多内容:http://blog.jordanterrell.com/post/LINQ-Distinct()-does-not-work-as-expected.aspx

答案 4 :(得分: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
}