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。。但是当我转到我的索引视图时,所有记录的链接都在那里。。同样,我只希望显示0MRecords
非常感谢您的帮助。您的查询效率极低。相反,您只需首先选择所有可能的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
。您应该为每个项目使用一个视图模型,并为每个项目单独设置一些布尔值。