我有一个包含几个关键字的列表。我像这样(通过煮熟以消除代码噪音)遍历他们,与他们建立我的linq查询:
List<string> keys = FillKeys() foreach (string key in keys){ q = q.Where(c => c.Company.Name.Contains(key)); }
现在,当我使我的键包含两个分别返回结果但不能同时出现的键(q中的每个项目都不是“ xyz”或“ 123”,从不“ 123”和“ xyz”)时,我仍然会得到结果。然后,结果集与其到达的最后一个字符串相同。
我看了一下linq查询,看起来它创建了正确的sql,但是它用相同的(最后一个有效值)替换了@ p1和@ p2。
我究竟做错了什么?
您正在keylambda表达式中重复使用相同的变量()。
key
请参阅我有关匿名方法的文章以了解更多详细信息,并且还有许多相关的SO问题:
简单的解决方法是先复制变量:
List<string> keys = FillKeys() foreach (string key in keys){ string copy = key; q = q.Where(c => c.Company.Name.Contains(copy)); }