我想通过一系列危险来查看是否已在ControlMeasures中为每个危险添加了控制措施。 如果每个危险都有一个控制措施,那么我将complete设置为true,否则我会中断foreach循环,将complete set设置为false。已经有一个打开的DataReader与此命令相关联,必须先关闭 - Foreach循环,如果语句
我已经写了下面的foreach循环,但在运行时我得到显示了针对if条件语句以下错误:
已经有一个用此命令,必须先关闭相关联的打开的DataReader。
我已经做了一些研究,看来我没有以正确的方式编写代码,但由于我仍然对此不熟悉,所以无法找到一种更好,更正确的编写方式。
[HttpGet]
public ViewResult AddControlMeasure(int raId)
{
// Get list of hazardids for this RA
IEnumerable<int> hazardIds = db.RiskAssessmentHazards.Where(x => x.RiskAssessmentId == raId).Select(x => x.HazardId);
var complete = false;
foreach (int HazardsId in hazardIds)
{
if (db.ControlMeasures.Where(x => x.HazardId == HazardsId && x.RiskAssessmentId == raId).Count() == 0)
{
break;
}
else
{
complete = true;
}
}
我认为你需要添加一个'.ToList'或'.ToArray'你'hazardIds'选择的结尾,否则在完成整个枚举之前,不会关闭该读者的连接。我也确信有一种方法可以在没有for循环的情况下进行,但我现在正在画一个空白。 –
可能是因为'db.RiskAssessmentHazards'返回'IQueryable',所以在执行foreach循环时并没有真正执行。 – markpsmith