我有一个搜索方法,它采用ID列表,我希望根据ID限制查询。
Param:IEnumerable filterType
foreach (int id in filterType)
{
query = query.Where(q => q.Item1 == id);
}
如果我尝试:
foreach (int id in filterType)
{
query = query.Where(q => q.Item1 != id);
}
似乎有效。
有谁知道为什么?
提前致谢。
答案 0 :(得分:4)
多个where
条款实际上是“AND-ed” - 所以,如果您的filterType
列表中有5个和10个,则表示Item1
必须同时为5 和 10,它不能同时出现。
我怀疑你真的想要:
query = query.Where(q => filterType.Contains(q.Item1));
换句话说,Item1
匹配 filterType
中的值之一。 (您可能还想考虑filterType
为空的情况。这应该是一切还是什么都不匹配?)
答案 1 :(得分:2)
通过执行query = query.Where(q => q.Item1 == id);
,您可以有效地构建类似于以下内容的查询:
query.Where(q => q.Item1 == id1)
.Where(q => q.Item1 == id2)
.Where(q => q.Item1 == id3)
.Where(q => q.Item1 == id4);
显然不会返回结果:一个项目不能有两个不同的ID。
你可能想要:
query.Where(q = filterType.Contains(q.Item1));