user2269613
user2269613

Reputation: 13

LinQ to Entities: Lambda where

I have met a weird situation. When I tried to search items with lambda,

searchGuid = new Guid(condition[0]);
searchItem = searchItem.Where(x => x.SiteId == searchGuid);
searchGuid = new Guid(condition[1]);
searchItem = searchItem.Where(x => x.FunctionTypeId == searchGuid);

It returns nothing. But when I change to

searchGuid = new Guid(condition[0]);
searchGuid2 = new Guid(condition[1]);
searchItem = searchItem.Where(x => x.SiteId == searchGuid && 
                                   x.FunctionTypeId == searchGuid2);

It returns right item which I expected.

Btw, it works with Linq to sql.

Thanks.

Upvotes: 1

Views: 190

Answers (1)

sloth
sloth

Reputation: 101032

The lambda functions capture the searchGuid variable, so at the time you execute your query, searchGuid is new Guid(condition[1]), hence your query is equivalent to

searchItem.Where(x => x.SiteId == new Guid(condition[1]))
          .Where(x => x.FunctionTypeId == new Guid(condition[1]))

which is not what you want.

You found a solution by yourself: Use a second variable (or just inline it).

Upvotes: 2

Related Questions