C# MVC:删除列表而不执行任何代码
伙计们,这个问题让我很困惑。我希望有人能向我解释发生了什么事,因为我觉得我疯了……:) 情况如下: 在我的索引方法(MVC2应用程序)中,我查询数据库中表的全部内容,并将其插入“temp”变量。然后根据传递给方法的参数缩小列表C# MVC:删除列表而不执行任何代码,c#,asp.net-mvc,C#,Asp.net Mvc,伙计们,这个问题让我很困惑。我希望有人能向我解释发生了什么事,因为我觉得我疯了……:) 情况如下: 在我的索引方法(MVC2应用程序)中,我查询数据库中表的全部内容,并将其插入“temp”变量。然后根据传递给方法的参数缩小列表 if (int.TryParse(costcenter, out tempint) && !string.IsNullOrWhiteSpace(costcenter)) { Trace.Write("From " + te
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());
这些参数作为字符串传递,因此我将它们转换为int,然后使用查询根据值(如果有)进行筛选。我注意到,当我选择一个CostCenter进行筛选时(除此之外,所有其他变量都为空),没有返回任何结果。我添加了一些跟踪来检查应该显示多少项。给定其中的3 Trace.Write命令,我希望输出如下:
From 8989 to 65
to 65
然而,我得到的是:
From 8989 to 65
to 0
这意味着“供应商”过滤器出现问题。我对其进行了调试,并逐步完成,程序执行以下操作:
From 8989 to 65
to 65
- 写入“to 65”字符串后,程序跳转到“if(…supplier…)
- 调试监视:tempint=0,供应商=null
- 由于计算结果为假,程序直接跳到下一个Trace.Writeline
- 突然,我的temp变量不包含任何元素
temp
现在是一个IEnumerable而不是IQueryable
我仍然不明白为什么会发生这种情况。有谁能解释一下,如果不将
temp
转换为列表,它为什么不起作用?发现您需要执行.ToList(),否则您的查询将按引用而不是按值继续工作
始终执行.ToList():)