3

私のデータベースには2つのテーブルとがReadsありAlarmsます。Reads(1)からAlarms(多くの)テーブルには1対多の関係があります。さまざまな理由で、Alarmsテーブルの外部キー制約が削除されました。この制約を復元できません。そのRead結果、EntityFrameworkモデルのオブジェクトにはAlarmsナビゲーションプロパティがありません。

私のReadViewModelクラスには、というブール型のプロパティがありますHasAlarms。テーブルにに関連するtrue行が少なくとも1つある場合は、これをに設定したいと思います。ナビゲーションプロパティがそこにある場合は、次のような方法でこれを実行できることを知っています。AlarmsReadAlarms

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

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

ただし、Alarmsナビゲーションプロパティはもうありません。私の現在の状況でこれを行うための最も効率的な方法は何ですか?

トニー

4

1 に答える 1

4

次のようなものが必要になります。

foreach ( ReadViewModel read in reads ) {
    read.HasAlarms = context.Alarms.Any(a => a.ReadId == read.Id);
}

また、結合を実行して、1つのクエリで状態を取得することもできます。

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 に答える