Add item to result set in asp.net mvc entity 5
我在这里查看了其他一些问题,但找不到我的答案。也许我没有使用正确的关键字进行搜索。
1 2 3 4 5 6 7 8 9 10 | 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 以查看它是否存在。如果是,我想在记录中添加一个布尔标志以显示在视图中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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); |
在我进入循环之前,我最初让它像这样返回并且一切正常
1 | return View(q.AsEnumerable()); |
问题是它告诉我一个查询的结果不能被枚举多次。
这是我的看法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | @model IEnumerable<CodeOfConduct.Models.CheckDirectReports_Result> Manager Sign Off @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.ToList() 来枚举结果 q 只是返回
你可以像这样使用 LINQ 来缩短你的代码
1 2 3 4 5 | var q = results.CheckDirectReports(EMPLID).ToList(); q.ForEach(a => { a.hasSignedOff = results.PERSON_SIGN_OFF.Any(p => p.EMPLID == a.EMPLID) }); return View(q); |
如果
1 2 3 4 5 6 | 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); |
可能有更好的方法来做到这一点,但我们需要更多地了解您的数据结构