Reputation: 13
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
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