在asp.net mvc实体5的结果集中添加项
本文关键字:结果 集中 添加 asp net mvc 实体 | 更新日期: 2023-09-27 18:15:29
我看了这里的一些其他问题,但找不到我的答案。也许我没有搜索到正确的关键字。
public partial class CheckDirectReports_Result
{
[Key]
public Guid? id { get; set; }
public string NAME { get; set; }
public string EMPLID { get; set; }
public short EMPL_RCD { get; set; }
public bool hasSignedOff { get; set; }
}
所以我有一个运行并返回结果的存储过程。然后我要循环遍历结果并比较ID以查看它是否存在。如果它是我想添加一个bool标志,以记录显示在视图。
var q = results.CheckDirectReports(EMPLID);
foreach (var i in q.ToList())
{
var g = results.PERSON_SIGN_OFF.Where(p => p.EMPLID == i.EMPLID).FirstOrDefault();
if(g != null)
{
i.hasSignedOff = true;
}
else
{
i.hasSignedOff = false;
}
}
return View(q);
在我放入循环之前,我最初让它像这样返回,一切正常
return View(q.AsEnumerable());
问题是它告诉我查询的结果不能被枚举多次。
这是我的观点:
@model IEnumerable<CodeOfConduct.Models.CheckDirectReports_Result>
<h2>Manager Sign Off</h2>
@using (Html.BeginForm("Save", "Manager", FormMethod.Post))
{
<table class="table">
<thead>
<tr>
<th>Name</th>
<th>Employee ID</th>
<th></th>
<th>Select</th>
</tr>
</thead>
<tbody>
@foreach(var c in Model) // Print the list
{
<tr>
<td>@c.NAME</td>
<td>@c.EMPLID </td>
@{
if (c.hasSignedOff == true)
{
<td class="bg-success">Employee Has completed Sign-off</td>
}
else
{
<td class="bg-danger">Employee has not completed Sign-off</td>
}
}
<td>
@Html.ActionLink("Select Employee", "SignOff", new { ids=c.EMPLID, name = c.NAME })
</td>
</tr>
}
</tbody>
</table>
为什么它告诉我查询的结果不能被枚举多次?
你可以返回一个List()给一个期待IEnumerable()的View。
在foreach中,通过执行q来枚举结果q。tolist()只返回q
而不是q.AsEnumerable()
你可以像这样使用LINQ来缩短你的代码
var q = results.CheckDirectReports(EMPLID).ToList();
q.ForEach(a => {
a.hasSignedOff = results.PERSON_SIGN_OFF.Any(p => p.EMPLID == a.EMPLID)
});
return View(q);
如果results.PERSON_SIGN_OFF
中的记录很少,我会将它们全部选中到list()中,然后检查EMPLID是否存在,以防止多次命中数据库。
var q = results.CheckDirectReports(EMPLID).ToList();
var signOffs = results.PERSON_SIGN_OFF.ToList();
q.ForEach(a => {
a.hasSignedOff = signOffs.Any(p => p.EMPLID == a.EMPLID)
});
return View(q);
可能有更好的方法,但是我们需要更多地了解你的数据结构