C# 循环以根据参数统计所有记录

C# 循环以根据参数统计所有记录,c#,razor,asp.net-mvc-5,conditional,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; } }

我有这个:

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;
    }

}
这样做的目的是隐藏my
.cshtml
索引视图中的链接。我想循环查看
AInfoes
表,检查
MRecords
表中是否存在基于外键的记录,
AID
与主键
ID
匹配

然后在默认索引视图中,每个记录都有一个
编辑
详细信息
删除
链接。如果
ViewBag.NoRecordExists=true,我只希望显示
Edit
链接。因此,如果没有任何
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 })
}
在我的MRecordsdb中,我特意删除了所有
MRecords
,其中
ID
等于10。。但是当我转到我的索引视图时,所有记录的链接都在那里。。同样,我只希望显示0
MRecords


非常感谢您的帮助。

您的查询效率极低。相反,您只需首先选择所有可能的
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)
{
    ...

你的查询效率太低了。相反,您只需首先选择所有可能的
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)
{
    ...

我已经做了你建议的改变。在我的
.cshtml
中,我放了:
@if(recordExists){@Html.ActionLink(“编辑维护记录”,“编辑”,“MRecords”,new{id=item.id})}
并且我故意删除了所有
MRecord
,其中
id
等于10。因此,我的AInfoes索引视图应该只显示该记录的编辑链接。但是,它显示了AInfoes表中所有记录的编辑链接,即使它们确实有
MRecords
,这可能意味着
ViewBag.RecordExists
要么求值为null(根本没有设置),要么根本无法转换为bool(它被设置为布尔类型以外的类型)。在任何一种情况下,视图中的这行代码都将计算为
false
,作为回退保存5个值
6、7、8、9、10
ViewBag.RecordExists=db.MRecords.Any(x=>aInfoesIds.Contains(x.AID))计算结果为true。。即使10没有任何
MRecords
?是的,因为
10
只是一种可能性。如果有任何其他ID的
MRecords
,那么您将得到true。看起来好像你真的想逐项了解是否有任何记录,而不仅仅是任何项目的任何记录。如果是这种情况,则根本不能使用
ViewBag
。您应该为每个项目使用视图模型,并为每个项目单独设置一些布尔值。在我的
.cshtml
中,我放了:
@if(recordExists){@Html.ActionLink(“编辑维护记录”,“编辑”,“MRecords”,new{id=item.id})}
并且我故意删除了所有
MRecord
,其中
id
等于10。因此,我的AInfoes索引视图应该只显示该记录的编辑链接。但是,它显示了AInfoes表中所有记录的编辑链接,即使它们确实有
MRecords
,这可能意味着
ViewBag.RecordExists
要么求值为null(根本没有设置),要么根本无法转换为bool(它被设置为布尔类型以外的类型)。在任何一种情况下,视图中的这行代码都将计算为
false
,作为回退保存5个值
6、7、8、9、10
ViewBag.RecordExists=db.MRecords.Any(x=>aInfoesIds.Contains(x.AID))计算结果为true。。即使10没有任何
MRecords
?是的,因为
10
只是一种可能性。如果有任何其他ID的
MRecords
,那么您将得到true。看起来好像你真的想逐项了解是否有任何记录,而不仅仅是任何项目的任何记录。如果是这种情况,则根本不能使用
ViewBag
。您应该为每个项目使用一个视图模型,并为每个项目单独设置一些布尔值。