循环根据参数计算所有记录

时间:2016-05-09 16:14:04

标签: c# razor asp.net-mvc-5 conditional

我有这个:

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表中是否存在任何记录。

然后在默认的索引视图中,每条记录都有一个EditDetailsDelete链接。如果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

的记录的链接

感谢任何帮助。

1 个答案:

答案 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)
{
    ...