2008-09-20 6 views
0

Учитывая следующую архитектуру:Entity Framework: как вернуть базовый тип из L2E

  • базовый объект 'организации'
  • производный объект 'Вступление: Base'
  • и далее полученный объект 'CancelledEntry: запись'

В EntitySQL я могу написать следующее:

[...] where it is of (only MyEntities.Entry) [...] 

вернуть только объекты типа Entry и no Entity или CancelledEntry.

В linq to sql следующая команда возвращает объекты типа Entry и CancelledEntry.

EntityContext.EntitySet.OfType<Entry>() 

Каков синтаксис/функция, используемая для возврата только объектов типа Entry?

ответ

2

Почему вы не применить метод расширения IQueryable < Ввод>, называемый ApplyBaseEntryFilter(), который будет применить этот фильтр и вернуть IQueryable < запись>.

Это пример повторного использования фрагментов запроса linq. Использование методов расширения в IQueryable < Entity> - отличный способ повторного использования запросов, так как вам не нужно копировать и вставлять фрагменты запросов вокруг вашего приложения, надеюсь, что это поможет.

1

Хорошо, я нашел частичное решение:

EntityContext.EntitySet.OfType<Entry>().Where(obj => !(obj is CancelledEntry)) 

Это совершенно ужасно, однако, так как если я создаю новый производный объект, я должен идти во всех запросах и, в частности добавить условие, чтобы удалить Это.

Там должен быть лучшим решением

 Смежные вопросы

  • Нет связанных вопросов^_^