处理lambda表达式

时间:2009-10-19 16:44:27

标签: c# lambda

我正在对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

3 个答案:

答案 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;