我有一个方法接受IQueryable<T>
作为称为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个结果。有人可以告诉我我要去哪里了。
请注意两个条件均成立。
答案 0 :(得分:2)
问题出在分配上,导致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);
如果您从两个if中都删除了attachments =
,则不会有任何问题。
if(firstCondition)
{
DoWork(attachments.Where(i => i.TestItemId == 1));
}
if(secondCondition)
{
DoWork(attachments.Where(i => i.TestItemId == 2));
}
答案 1 :(得分:0)
您不应为firstCondition分配附件,结果将按2个条件进行过滤: TestItemId == 1 && TestItemId == 2。 =>它总是返回空列表;