Структура сущностей:как вернуть базовый тип из L2E
-
01-07-2019 - |
Вопрос
Рассматривая следующую архитектуру:
- базовый объект "Сущность"
- производный объект "Запись: База"
- и еще один производный объект "CancelledEntry:Запись"
В EntitySQL я могу написать следующее:
[...] where it is of (only MyEntities.Entry) [...]
возвращать только объекты типа Entry и без Entity или CancelledEntry.
В linq to sql следующая команда вернет объекты типа Entry и CancelledEntry.
EntityContext.EntitySet.OfType<Entry>()
Какой синтаксис / функция использовать для возврата только объектов типа Entry?
Решение
Почему бы вам не применить метод расширения к IQueryable< Entry > вызвал ApplyBaseEntryFilter(), который применил бы этот фильтр и вернул IQueryable< Запись >.
Это пример того, как повторно использовать фрагменты запроса linq.Использование методов расширения в IQueryable< Entity > - отличный способ повторного использования запросов, поскольку вам никогда не понадобится копировать и вставлять фрагменты запроса в ваше приложение, надеюсь, это поможет.
Другие советы
Хорошо, я нашел частичное решение:
EntityContext.EntitySet.OfType<Entry>().Where( obj => !(obj is CancelledEntry) )
Однако это довольно ужасно, поскольку, если я создаю новый производный объект, мне приходится выполнять все запросы и специально добавлять условие для его удаления.
Должно быть лучшее решение