我想通過一系列危險來查看是否已在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