I have a List containing several keywords. I foreach through them building my linq query with them like so (boiled down to remove the code noise):
List<string> keys = FillKeys() foreach (string key in keys){ q = q.Where(c => c.Company.Name.Contains(key)); }
When I now make my keys contain 2 keys that return results seperatly, but can never occure together (every item in q is either ‘xyz’ or ‘123’, never ‘123’ AND ‘xyz’), I still get results. The resultset is then the same as the last string it got to.
I had a look at the linq query and it appears it creates the correct sql, but it replaces @p1 AND @p2 both by the same (last itterated) value.
What am I doing wrong?
You’re reusing the same variable (
key) in your lambda expression.See my article on anonymous methods for more details, and there are a number of related SO questions too:
The simple fix is to copy the variable first: