Mysql 如何选择视图中模型的特殊索引?

Mysql 如何选择视图中模型的特殊索引?,mysql,asp.net-mvc,error-handling,datareader,Mysql,Asp.net Mvc,Error Handling,Datareader,我在controller中使用此查询从四个表中创建列表: var ViewModel = (from APP in db1.application where APP.APP_STATUS == "TO_DO" join APPDEL in db1.app_delegation on APP.APP_UID equals APPDEL.APP_UID join Con in db1.conten

我在controller中使用此查询从四个表中创建列表:

var ViewModel = (from APP in db1.application
                 where APP.APP_STATUS == "TO_DO"
                 join APPDEL in db1.app_delegation on APP.APP_UID equals APPDEL.APP_UID
                 join Con in db1.content on APPDEL.TAS_UID equals Con.CON_ID
                 join BPMNPRC in db1.bpmn_process on APPDEL.PRO_UID equals BPMNPRC.PRJ_UID
                 join RUSRE in db1.rbac_users on APP.APP_INIT_USER equals RUSRE.USR_UID
                 where APPDEL.TAS_UID == Con.CON_ID 
                    && Con.CON_CATEGORY == ("TAS_TITLE")
                    && APP.APP_UID == APPDEL.APP_UID 
                    && APPDEL.DEL_THREAD_STATUS == "OPEN" 
                    && APPDEL.USR_UID == bpmUseid.BPMSID
                 select new ApplicationContentViewModel
                         {
                             creator = RUSRE,
                             app_delegation = APPDEL,
                             application = APP,
                             content = Con,
                             task = BPMNPRC,
                         }).AsEnumerable();
return View(ViewModel);
但我需要在
APPDEL
(app\u delegation)中选择一条特殊记录,然后检索该记录的名称

我在视图中使用此命令按
DEL_INDEX
字段选择项:

@foreach (var item in Model)
{
  <th>                                                    
  @(item.app_delegation.DEL_INDEX == Model.Max(x => x.app_delegation.DEL_INDEX) - 1 ? item.creator.USR_LASTNAME : "");
 </th>  
}
@foreach(模型中的变量项)
{
@(item.app_delegation.DEL_INDEX==Model.Max(x=>x.app_delegation.DEL_INDEX)-1?item.creator.USR_LASTNAME:);
}
事实上,我想选择
delu INDEX-1
的最大值,并检索它的姓氏

不幸的是,我遇到了以下错误:

System.Data.Entity.Core.EntityCommandExecutionException::'执行命令定义时出错。有关详细信息,请参阅内部异常。”

内部异常:

MySqlException:已经有一个与此连接关联的打开的DataReader,必须先关闭它


如何处理此错误?

我认为在执行expression
Model.Max(x=>x.app\u delegation.DEL\u INDEX)
之前,应该使用
ToList()
方法,而不是
AsEnumerable()
,如下所示:

var ViewModel = (from APP in db1.application
                 where APP.APP_STATUS == "TO_DO"
                 join APPDEL in db1.app_delegation on APP.APP_UID equals APPDEL.APP_UID
                 join Con in db1.content on APPDEL.TAS_UID equals Con.CON_ID
                 join BPMNPRC in db1.bpmn_process on APPDEL.PRO_UID equals BPMNPRC.PRJ_UID
                 join RUSRE in db1.rbac_users on APP.APP_INIT_USER equals RUSRE.USR_UID
                 where APPDEL.TAS_UID == Con.CON_ID 
                 && Con.CON_CATEGORY == ("TAS_TITLE")
                 && APP.APP_UID == APPDEL.APP_UID 
                 && APPDEL.DEL_THREAD_STATUS == "OPEN" 
                 && APPDEL.USR_UID == bpmUseid.BPMSID
                 select new ApplicationContentViewModel
                 {
                     creator = RUSRE,
                     app_delegation = APPDEL,
                     application = APP,
                     content = Con,
                     task = BPMNPRC,
                 }).ToList(); // here is the change
解释

通过调用
AsEnumerable()
数据读取器将保持打开状态,并且在执行
Model.Max()
时,由于您使用的MySQL连接器尚不支持MARS(多个活动结果集),LINQ to Objects将引发异常。使用
ToList()
方法可确保在惰性加载检查所有导航属性时完成数据读取器操作

旁注:

假设您使用的是EF,那么在处理多个查询时,请尝试在单个语句中添加相关对象

类似问题:


我纠正了它。错误已删除,但在中,我无法显示我最喜欢的项目。您能帮我显示项目名称吗?该项目的
DEL_INDEX
值等于所有记录的最大DEL_INDEX-1。