我有以下代码
int[] array = new int[10] { 4, 50 , 60 , 80 , 120 , 46 , 52 , 60 , 18 , 221};
var sum = (from num in array
where ((num % 4) != 0 && (num % 6 ) != 0) && ((num % 2) != 0)
select array);
Console.Write(sum.Sum());
问题是我不能使用Sum()
。它说
“ System.Collections.Generic.IEnumerable”不包含 “ Sum”的定义和最佳扩展方法重载 'System.Linq.Queryable.Sum(System.Linq.IQueryable)'
我该怎么做?
答案 0 :(得分:7)
从此更改您的代码:
var sum = (from num in array
where ((num % 4) != 0 && (num % 6 ) != 0) && ((num % 2) != 0)
select array);
对此:
var sum = (from num in array
where ((num % 4) != 0 && (num % 6) != 0) && ((num % 2) != 0)
select num);
您需要select num
而不是select array
。了解更多https://docs.microsoft.com/en-us/dotnet/api/system.linq.enumerable.select?view=netframework-4.7.2
答案 1 :(得分:2)
从收到的错误消息中,
'System.Collections.Generic.IEnumerable'不包含'Sum'的定义,并且最佳扩展方法重载'System.Linq.Queryable.Sum(System.Linq.IQueryable)'
可以观察到,变量num
的类型是IEnumerable<int[]>
,而不是您可能期望的IEnumerable<int>
。您可以通过将代码更改为select num
而不是select array
来解决此问题。
此外,我建议您在此处使用流畅的扩展方法,以免您在同一位置混用两种样式。通常,保持格式和样式一致是一种很好的做法。看起来像这样:
var sum = array
.Where(num => num%4 != 0 && num%6 != 0 && num%2 != 0 )
.Sum();