使用LINQ删除任何重复的值

nic*_*wdy 6 c# linq

我已经在SO上看到了这个问题,但它没有回答我的问题,因为我想删除一个也是重复的值的所有实例.

例如,如果我有一个包含这些值的列表:A,A,C,D,B,A,E,E

我想写一些逻辑,其中新列表具有以下值:C,D,B.

因为A和E被归类为重复,我想完全删除它们.

所以考虑到这一点,这是我的代码:

// List having duplicate string elements.
List<string> list = new List<string>();
list.Add("A");
list.Add("A");
list.Add("C");
list.Add("D");
list.Add("B");
list.Add("A");
list.Add("E");
list.Add("E");

// Get distinct elements.
var distinct = (from item in list orderby item select item).Distinct();

foreach (string value in distinct)
{
    Console.WriteLine("Distinct : {0}", value);
}
Run Code Online (Sandbox Code Playgroud)

这是输出:

A,B,C,D,E

小智 9

这应该这样做(C也应该在列表中,它只在代码示例中出现一次)

var distinct = list.GroupBy(x=>x).Where(y=>y.Count()==1).Select(z=>z.Key);
Run Code Online (Sandbox Code Playgroud)

  • 是的,但你应该使用`Select`子句来选择实际值; 否则,`distinct`是`IGrouping`s的序列. (2认同)