3

我的数据库有两个表,Reads并且Alarms. Reads从(1) 到Alarms(many) 表存在一对多关系。由于种种原因,表上的外键约束Alarms被删除了。我无法恢复此约束。因此,我的实体框架模型中的Read对象没有Alarms导航属性。

我的ReadViewModel班级中有一个布尔属性,名为HasAlarms. 如果表true中至少有一行AlarmsRead. 我知道如果Alarms导航属性在那里,我可以这样做:

var reads = from read in context.Reads
            select new ReadViewModel { . . . };

foreach ( ReadViewModel read in reads ) {
    read.HasAlarms = read.Alarms.Any();
}

但是,我不再拥有警报导航属性。在我目前的情况下,最有效的方法是什么?

托尼

4

1 回答 1

4

你需要这样的东西:

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;
于 2012-04-13T18:40:23.953 回答