链接哪些子句不返回结果

时间:2011-07-12 11:00:57

标签: linq linq-to-entities

我有一个搜索方法,它采用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);
} 

似乎有效。

有谁知道为什么?

提前致谢。

2 个答案:

答案 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));