3

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

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

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

4

5 回答 5

7

干得好:

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

foreach(String distinctName in distinctNames) 
    Console.WriteLine(distinctName);
于 2013-02-28T00:12:24.647 回答
4

我认为这也应该有效;

names.Distinct().ToList().ForEach( n => Console.WriteLine(n));
于 2013-02-28T00:22:31.763 回答
2

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

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

于 2013-02-28T01:04:55.037 回答
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);
于 2013-02-28T00:13:45.603 回答
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
}
于 2014-01-22T12:47:21.267 回答