我的数据库有两个表,Reads
和Alarms
。从Reads
(1)到Alarms
(许多)表存在一对多关系。由于各种原因,删除了Alarms
表上的外键约束。我无法恢复此约束。因此,我的实体框架模型中的Read
对象没有Alarms
导航属性。
我的ReadViewModel
类中有一个布尔属性,称为HasAlarms
。我希望如果true
表中至少有一行与Alarms
相关的行将其设置为Read
。我知道,如果Alarms
导航属性在那里,我可以使用以下方法进行此操作:
var reads = from read in context.Reads
select new ReadViewModel { . . . };
foreach ( ReadViewModel read in reads ) {
read.HasAlarms = read.Alarms.Any();
}
但是,我不再具有“警报”导航属性。在当前情况下,最有效的方法是什么?
托尼
最佳答案
您将需要以下内容:
foreach ( ReadViewModel read in reads ) {
read.HasAlarms = context.Alarms.Any(a => a.ReadId == read.Id);
}
您也可以执行连接,以在一个查询中获取状态:
var results = from r in reads
join a in context.Alarms on r.Id equals a.ReadId into ra // perform a left join
from a in ra.DefaultIfEmpty() // on Alarms
select new { Read = r, HasAlarm = a != null };
foreach (var res in results)
res.Read.HasAlarm = res.HasAlarm;
关于c# - 需要在没有导航属性的 Entity Framework 中做等效于.Any的操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10146321/