gpt4 book ai didi

c# - 需要在没有导航属性的情况下在 Entity Framework 中做等效的 .Any

转载 作者:行者123 更新时间:2023-11-30 15:39:37 24 4
gpt4 key购买 nike

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

我的 ReadViewModel 类中有一个名为 HasAlarms 的 bool 属性。如果 Alarms 表中至少有一行与 Read 相关,我希望将其设置为 true。我知道如果 Alarms 导航属性在那里,我可以用这样的东西来做到这一点:

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

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

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

托尼

最佳答案

你需要这样的东西:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com