Я пытаюсь отфильтровать массив объектов в соответствии с условием во вложенном отношении ко многим и не знаю, как написать фильтр.
Чтобы проиллюстрировать это, представьте, что я смоделировал систему, которая управляет людьми, поступающими в колледж, и смоделировал следующие сущности и отношения:
- Лицо, имеющее отношение ко многим со Школьной сущностью
- Школьная сущность, которая имеет отношение «один к одному» с сущностью SchoolType (в дополнение к отношениям «обратный ко многим» с сущностью Person)
Сущность SchoolType, которая имеет отношение один к одному с
Сущность FinancialAwardType (в дополнение к отношениям типа «обратный ко многим» с сущностью School)
объект FinancialAwardType
Объект FinancialAwardType просто получает различные типы финансовых вознаграждений, например, например, грант, стипендию или кредит.
Для целей этого примера требование состоит в том, чтобы финансовые вознаграждения были специфичны для типов школ, следовательно, моделирование отношений между сущностями SchoolType и FinancialAwardType как таковыми.
То, что я хочу сделать, - это создать фильтр, который даст мне подмножество лиц, которые подали заявки в школы, предлагающие определенный тип финансового вознаграждения, и мне трудно определить, как написать такой фильтр, учитывая вложенные отношения «ко многим».
Я потенциально могу сделать это в несколько шагов, например:
- фильтрация списка SchoolTypes, чтобы получить только SchoolTypes, которые предлагают награды за заслуги ....
- затем отфильтруйте Школы, чтобы дать мне только те Школы, которые относятся к одному из отфильтрованных Типов школ ....
- тогда, отфильтруйте людей, чтобы дать мне только тех людей, которые обратились к
эти отфильтрованные школы ...
Это кажется несколько неэффективным, и мне интересно, есть ли более элегантное решение для выполнения фильтра, который я ищу. Любые предложения будут ценны. При необходимости я могу показать код или фрагменты кода, которые я пытался выполнить для вышеуказанных шагов.
В ответ на некоторые комментарии и предложения ... я надеялся использовать filter () для возврата коллекции Persons ... что-то вроде этого:
let personsReceivingGrants = persons.schoolsApplied.filter() {
$0.schoolType?.awardType?.name == "Grant Award"
}
Проблема в том, что отношение Person-> School ко многим определяется как NSSet of Any, а Any не имеет типа schoolType ... Можно ли быть более точным с точки зрения указания компилятору, какой тип объекта находится в NSSet, чтобы я мог использовать механизм filter ()? Или есть другой более подходящий подход для достижения этой фильтрации?
Заранее спасибо за любые предложения или помощь.