我有这个:
foreach(var item in db.AInfoes)
{
if (db.MRecords.Any(s => s.AID == item.ID))
{
ViewBag.RecordExists = true;
}
else if(!db.MRecords.Any(s => s.AID == item.ID))
{
ViewBag.NoRecordExists = true;
}
}
这样做的目的是隐藏我的.cshtml
索引视图中的链接。我想循环遍历AInfoes
表,并根据与主键MRecords
匹配的外键AID
检查ID
表中是否存在任何记录。
然后在默认的索引视图中,每条记录都有一个Edit
,Details
,Delete
链接。如果Edit
,我只希望显示ViewBag.NoRecordExists = true
链接。所以,如果MRecords
ID
我的CSHTML:
@if (!ViewBag.RecordExists)
{
@Html.ActionLink("Edit Maintenance Record", "Edit", "MaintenanceRecords", new { id = item.ID })
}
@if (ViewBag.NoRecordExists == true)
{
@Html.ActionLink("Edit Maintenance Record", "Edit", "MaintenanceRecords", new { id = item.ID })
}
在我的 MRecords 数据库中,我故意通过删除MRecords
等于10的所有ID
对此进行了测试..但是当我进入我的索引视图时,链接就在那里所有记录..再次我只想显示有0 MRecords
感谢任何帮助。
答案 0 :(得分:2)
您的查询非常低效。相反,您应该只选择所有可能的AInfoes
ID,首先,然后查询匹配的任何MRecords
。
var aInfoesIds = db.AInfoes.Select(m => m.ID).ToList();
ViewBag.RecordExists = db.MRecords.Any(m => aInfoesIds.Contains(m.AID));
此外,不需要ViewBag.NoRecordExists
,因为这与RecordExists
正好相反。在您看来:
@{ var recordExists = ViewBag.RecordExists as bool? ?? false; }
然后,如果你想只在记录不存在的情况下做某事,只需否定它:
@if (!recordExists)
{
...