ASP.NET MVC查询检验结果报Sequence contains no elements问题咨询
解决方案
1. 控制器代码修改
给所有集合属性添加空值兜底逻辑,确保哪怕没有查询到数据,返回的也是空集合而非null,避免视图调用时报空引用错误:
public ActionResult MasterDetails(int id) { var tables = new Orders_Tables { testsRanges = db.TestsRanges.ToList() ?? new List<TestsRanges>(), LabResults = db.LAB_RESULTS.Where(o => o.ORDER_ID == id).Include(p => p.LabTests).Include(t => t.Patients).ToList() ?? new List<LAB_RESULTS>(), LabParaResult = db.LAB_PARA_RESULTS.Where(o => o.ORDER_ID == id).Include(t => t.Patients).Include(t => t.LabTests).Include(c => c.Customers).ToList() ?? new List<LAB_PARA_RESULTS>(), LabCultureResults = db.LAB_CULTURE_RESULT.Where(o => o.ORDER_ID == id).Include(t => t.Patients).Include(t => t.LabTests).Include(c => c.Customers).ToList() ?? new List<LAB_CULTURE_RESULT>(), LabMicroResults = db.LAB_MICRO_NEGATIVE_RESULT.Where(o => o.ORDER_ID == id).ToList() ?? new List<LAB_MICRO_NEGATIVE_RESULT>(), labCashView = db.LAB_RESULT_CASH_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_RESULT_CASH_VIEW>(), // 重点给报错的这个集合加兜底 labClinicsViewResult = db.LAB_RESULTS_CLINIC_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_RESULTS_CLINIC_VIEW>(), LabParasitologyView = db.LAB_PARASITOLOGY_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_PARASITOLOGY_VIEW>(), // 缺失的三个视图集合也按同样规则补全兜底 LabCulturesView = db.LAB_CULTURES_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_CULTURES_VIEW>(), LabMicroView = db.LAB_MICRO_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_MICRO_VIEW>(), LabHistopathologyView = db.LAB_HISTOPATHOLOGY_VIEW.Where(o => o.order_number == id).ToList() ?? new List<LAB_HISTOPATHOLOGY_VIEW>() }; return View(tables); }
注意:上述代码中的泛型类型需要替换为你项目中对应的实体类名。
2. 视图代码加固
使用C#空条件运算符?.调用集合的FirstOrDefault方法,哪怕集合意外为null也会直接返回null,不会抛出异常:
// 只需要修改LABCLINICVIEW相关的调用行,其他集合同理调整即可 var labhema1 = LABCLINICVIEW?.FirstOrDefault(x => x.DEPTID == 1); var labBio1 = LABCLINICVIEW?.FirstOrDefault(x => x.DEPTID == 2); var labSer1 = LABCLINICVIEW?.FirstOrDefault(x => x.DEPTID == 3); var labHor1 = LABCLINICVIEW?.FirstOrDefault(x => x.DEPTID == 4); var labcovid1 = LABCLINICVIEW?.FirstOrDefault(x => x.DEPTID == 9);
3. 渲染逻辑调整
后续视图渲染各个科室的检验结果时,先判断对应的变量是否为null,只有不为null时才渲染对应模块,为空直接跳过即可:
@if(labcovid1 != null) { <!-- 渲染科室9的检验结果内容 --> } @if(labPara1 != null) { <!-- 渲染科室6的检验结果内容 --> } <!-- 其他科室模块按相同规则处理 -->
修改完成后,科室6、8的订单查询时,找不到对应视图数据只会把对应变量赋值为null,不会抛出异常,页面会正常加载其他存在的检验结果内容。
内容的提问来源于stack exchange,提问作者Ziad Adnan
相关产品推荐
相关产品推荐

