我正在对List中的每个整数进行平方。这是代码。
class SomeIntgs
{
List<int> newList = new List<int>();
public List<int> get()
{
IEnumerable<int> intrs = new int[] { 1, 2, 3, 4, 5, 6, 7, 8 };
newList.AddRange(intrs);
return newList;
}
}
我在Main()
中收到错误 SomeIntgs stg = new SomeIntgs();
var qry = from n in stg.get() where (P => P*P) select n;
错误:“无法将lambda表达式转换为bool类型”。
请帮助。
还帮助我,我如何在一般情况下处理lambda
答案 0 :(得分:7)
您不需要where
,请尝试:
SomeIntgs stg = new SomeIntgs();
var qry = from n in stg.get() select n*n;
或
var qry = stg.get().Select(P => P*P);
Enumerable.Where
用于过滤序列中的元素 - 您真正想要做的是投射一个新的元素序列,如上所示。
答案 1 :(得分:4)
where
子句所使用的lambda指定如何匹配IQueryable
中的项目。将返回满足您提供的表达式的IQueryable的任何成员。 (这就是你的编译器抱怨bool的原因。)
正如其他人所提到的,您可以删除where子句以对列表中的每个项目进行平方。
var ints = new int []{1,2,3,4,5,6,7,8};
var squares = ints.Select(x => x*x);
var evenSquares = ints.Where(x => (x % 2) == 0).Select(x => x*x); // only square
//the even numbers in the list
答案 2 :(得分:3)
SomeIntgs stg = new SomeIntgs();
var qry = from n in stg.get() select n*n;