情况如下: 在我的Index方法(MVC2应用程序)中,我查询数据库中表的全部内容,并将其插入到'temp'变量中。然后,我根据传递给我的方法的参数缩小列表范围。
if (int.TryParse(costcenter, out tempint) && !string.IsNullOrWhiteSpace(costcenter))
{
Trace.Write("From " + temp.Count());
temp = temp.Where(x => x.tbl_CostCenters.Id == tempint);
Trace.WriteLine(" to " + temp.Count());
}
if (int.TryParse(supplier, out tempint) && !string.IsNullOrWhiteSpace(supplier))
{
temp = temp.Where(x => x.tbl_EquipmentType.tbl_Suppliers.id == tempint);
}
Trace.WriteLine(" to " + temp.Count());
这些参数作为字符串传递,因此我将它们转换为整数,然后使用查询根据值(如果有)进行过滤。我注意到的是,当我选择要过滤的CostCenter时(没有别的,所有其他变量都为空),没有返回结果。我添加了一些跟踪来检查应该显示多少项。鉴于其中有3个Trace.Write命令,我希望我的输出如下:
From 8989 to 65
to 65
然而,我得到的是:
From 8989 to 65
to 0
这意味着“供应商”过滤器出现问题。我调试它并逐步完成,程序执行以下操作:
我对此感到困惑,因为我的方法没有执行任何与temp变量相关的命令,但是它被清空了。 此外,当我评论“供应商”-filter(整个IF块)时,代码工作。错误发生在“供应商” - 过滤器中。
任何人都知道为什么会这样?提前谢谢!
更新
如果我只注释掉“供应商”-if-block的内容,并保留if-block本身,那也是不对的。所以问题出现在if语句的评估中。我在这里失去理智吗? :(
进一步更新
好吧,我通过在每个语句中添加.ToList()来修复它,以便temp
现在是IEnumerable而不是IQueryable。
我仍然对为什么会发生这种情况感到困惑。任何人都可以解释为什么在没有将temp
转换为List的情况下它不起作用?
答案 0 :(得分:0)
发现你需要做一个.ToList(),否则你的查询会继续按引用而不是按值运行。
始终执行.ToList():)