使用Linq只返回一次项目

时间:2010-07-11 23:15:23

标签: c# .net linq distinct

这就是我想要做的。使用由空格分隔的一系列数字。保存这些数字后,我想只返回一次所有数字的字符串,即使数字在序列中出现了多次。

string[] tempNumbers = textValue.Split(' ');

IEnumerable<string> distinctNumbers = tempNumbers.Where(value => value.Distinct());

我收到了这个错误:

Error   2   Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<char>' to 'bool' c:\users\sergio\documents\visual studio 2010\Projects\LinqPlayground\LinqPlayground\SetSemanticsExample.cs  67  75  LinqPlayground

2 个答案:

答案 0 :(得分:6)

扩展方法IEnumerable.Distinct不是谓词函数。它在IEnumerable<T>上运行并返回一个新的IEnumerable<T>,其中每个元素只出现一次。

要修复代码,请执行以下操作:

IEnumerable<string> distinctNumbers = tempNumbers.Distinct();

  

我想只返回一次所有数字的字符串

如果您希望将结果作为单个空格分隔的字符串,那么除了上述内容之外,您还需要调用string.Join

string result = string.Join(" ", distinctNumbers.ToArray());
txtResult.Text = result;

答案 1 :(得分:1)

其中(value =&gt; value.Distinct())将从tempNumbers中获取每个字符串进行评估。此外,字符串是字符集合。这就是为什么你可以将Distinct()应用到

  

值。

此外,Distinct()扩展方法的结果是和IEnumerable<T>,其中T是char。因此整个操作导致异常。

为了获得不同的数字,您可以使用查询

var distinctNumbers = (from elem in tempNumbers
                      select elem).Distinct();

干杯