Mysql 如何选择视图中模型的特殊索引?
我在controller中使用此查询从四个表中创建列表: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
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。