Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC:删除列表而不执行任何代码_C#_Asp.net Mvc - Fatal编程技术网

C# MVC:删除列表而不执行任何代码

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

伙计们,这个问题让我很困惑。我希望有人能向我解释发生了什么事,因为我觉得我疯了……:)

情况如下: 在我的索引方法(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());
这些参数作为字符串传递,因此我将它们转换为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变量相关的命令,但它会被清空。 另外,当我注释“supplier”-filter(整个IF块)时,代码工作。错误发生在“供应商”筛选器中

有人知道为什么会这样吗?提前谢谢

更新

如果我只注释掉“supplier”——If块的内容,并保留If块本身,那么它也会出错。因此,问题出现在if语句的求值中。我是不是疯了(

进一步更新

好的,我通过在每个语句中添加.ToList()来修复它,因此
temp
现在是一个IEnumerable而不是IQueryable


我仍然不明白为什么会发生这种情况。有谁能解释一下,如果不将
temp
转换为列表,它为什么不起作用?

发现您需要执行.ToList(),否则您的查询将按引用而不是按值继续工作

始终执行.ToList():)