C# 过滤IQueryable会返回错误的结果

C# 过滤IQueryable会返回错误的结果,c#,iqueryable,C#,Iqueryable,我有一个方法,它接受IQueryable作为一个名为attachments的参数。在这个方法中,我在多个if语句中进一步过滤查询。因此,我的代码如下: if(firstCondition) { attachments = attachments.Where(i => i.TestItemId == 1); //3 records in db DoWork(attachments); } if(secondCondition) { attachments = attachm

我有一个方法,它接受
IQueryable
作为一个名为
attachments
的参数。在这个方法中,我在多个
if
语句中进一步过滤查询。因此,我的代码如下:

if(firstCondition)
{
   attachments = attachments.Where(i => i.TestItemId == 1); //3 records in db
   DoWork(attachments);
}
if(secondCondition)
{
   attachments = attachments.Where(i => i.TestItemId == 2); //2 records in db
   DoWork(attachments);
}
...
内部
DoWork()我做:

foreach(var items in attachments)
{
   //write attachment name to file here
}
在数据库中,我总共有5条记录,在第一条
if
语句中,我得到了相应的结果。然而,在第二个
if
条件中,我在查询中得到了0结果。有人能告诉我哪里出了问题吗

请注意这两个if条件都为true。

条件的串联 问题在于赋值,导致
Where
子句的串联

attachments = attachments.Where(i => i.TestItemId == 1);
attachments = attachments.Where(i => i.TestItemId == 2);
以下代码与上述代码相同:

attachments.Where(i => i.TestItemId == 1).Where(i => i.TestItemId == 2);
如果从两个ifs中删除
附件=
,则不会有任何问题

if(firstCondition)
{
   DoWork(attachments.Where(i => i.TestItemId == 1));
}

if(secondCondition)
{
   DoWork(attachments.Where(i => i.TestItemId == 2));
}

您不应为firstCondition分配附件,结果将按2个条件进行筛选: TestItemId==1&&TestItemId==2。
=>总是返回空列表

连接
,其中
条件将导致
查询。因此,这两个组合有效地导致
从TestItemId=1和TestItemId=2的附件中选择*
。也许你在想一个
@Silvermind你会建议我采取什么方法?我会在每个if条件中创建一个
var
吗?您希望在您的条件中使用OR逻辑吗?ie Id为1或2?如果我只想要Id为1的项目,则可能与@Chris Inside first重复;如果Id为2,则可能与@Chris Inside first重复,因此不需要。我总共有8个条件需要满足。您最后一段代码的缺点是,它现在正在执行多个SQL查询。您需要在之前使用ToList来避免这种情况。但是我不知道什么类型的对象是附件,它可以是一个列表转换成IQueryable。我知道,我只是说整个事情都可以通过一个调用完成。
attachment
IQueryable