При получении доступа к базе данных с помощью Entity Framework У меня есть доступные три объекта:LINQ: ребенок фильтр объектов
- stt_dictionary
- stt_concept
- stt_term
Каждый из этих объектов имеет коллекцию четвертого объекта, 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 все имеет INT в качестве своего типа ID , необходимо также следующее:
stt_change_log.element_type_id = (7 | 8 | 9)
Теперь, когда я запускаю запрос, как показано ниже, он возвращает все объекты stt_change_log с указанным идентификатором, что означает, что если я хочу объекты stt_change_log при stt_dictionary.id = 1, я также получаю записи stt_change_log, относящиеся к объектам stt_concept и stt_term, ID = 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 коллекции?
Я также добавлю, что я намерен сделать это в одном запросе.
Спасибо за очень быструю реакцию, Эрик. Мне не нужен этот первый .Include, поскольку этот уровень детей заполняется ассоциацией. Однако, хотя существует связь между stt_change_log и stt_change_types, stt_change_log.Свойство stt_change_type не заполняется автоматически (я не знаю почему). Итак, поскольку оператор .Include доступен только для следующего уровня вниз (а не для уровня, на который я хочу включить фильтр), это работает в мою пользу? Означает ли это, что есть * что-то, что я могу сделать в коллекции stt_change_log? – awj