user192142
user192142

Reputation:

Working on lambda expression

I am squaring each integer in a List. Here is the code.

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;

    }
}

I am getting error in Main()

    SomeIntgs stg = new SomeIntgs();
    var qry = from n in stg.get() where (P => P*P) select n;

Error : "Can not convert lambda expression to type bool ".

Help Please.

Also help me, how can i handle lambda in general context

Upvotes: 1

Views: 280

Answers (3)

Andrew Hare
Andrew Hare

Reputation: 351748

You don't need the where, try this:

SomeIntgs stg = new SomeIntgs();
var qry = from n in stg.get() select n*n;

or

var qry = stg.get().Select(P => P*P);

Enumerable.Where is used to filter elements from a sequence - what you really want to do is project a new sequence of elements like I have shown above.

Upvotes: 7

Kirschstein
Kirschstein

Reputation: 14868

The lambda that the where clause takes specifies how you match an item from your IQueryable. Any member of the IQueryable that satisfies the expression you supply will be returned. (This is why your compiler is complaining about bools).

As others have mentioned, you can drop the where clause to square each item in the list.

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

Upvotes: 4

eglasius
eglasius

Reputation: 36035

SomeIntgs stg = new SomeIntgs();
var qry = from n in stg.get() select n*n;

Upvotes: 3

Related Questions