我的数据库有两个表,ReadsAlarms。从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/

10-11 02:52