Entity Framework 経由でデータベースにアクセスする場合、次の 3 つのエンティティを使用できます。
- stt_dictionary
- stt_concept
- stt_term
これらの各エンティティには、4 番目のエンティティ stt_change_log のコレクションがあります。
たとえば、
stt_dictionary.stt_change_log = ICollection<stt_change_log>
これらの上位 3 つの要素と stt_change_log の関係は次のとおりです。
stt_change_log.element_id = (stt_dictionary | stt_concept | stt_term).id;
ただし、stt_dictionary、stt_concept、および stt_term はすべてID タイプとしてintを持っているため、次も必要です。
stt_change_log.element_type_id = (7 | 8 | 9)
ここで、以下のようなクエリを実行すると、指定された ID を持つすべての stt_change_log エンティティが返されます。つまり、stt_dictionary.id = 1 のときに stt_change_log エンティティが必要な場合、ID もある stt_concept および stt_term エンティティに関連する stt_change_log エントリも取得します。 = 1. つまり、stt_change_log コレクションには追加のフィルタリングが必要です。
var daoDictionary = (from d in db.stt_dictionary
.Include("stt_change_log.stt_change_types")
where d.id == id
select d).FirstOrDefault();
stt_change_log コレクション内の各アイテムの element_type_id プロパティの値を指定して、stt_change_log エンティティをフィルタリングするにはどうすればよいですか?
また、これを 1 つのクエリで実行することを意図していることも付け加えておきます。