Как запрашивать объекты всех типов, кроме одного в таблице для каждой иерархии?

Я пытаюсь сделать что-то, что казалось бы очень простым. Я хочу запросить все типы в таблице для каждой иерархии, кроме одного типа. Это должно выполняться как один (постраничный) запрос к базе данных.

Чтобы вернуть один тип, я могу вызвать IQueryable<T>.OfType<T>(). Я не вижу способа передать подмножество типов. Насколько я знаю, Дискриминатор не может быть представлен как свойство модели, поэтому я не могу фильтровать с помощью любого вызова Where(x => x.Discriminator != value).

Кто-то предложил что-то вроде IQueryable<T>.Where(x => x is Type1 || x is Type2 || x is Type3), но я помню, что такая структура работает неправильно. Кто-то также предложил использовать OfType для каждого типа, к которому присоединяются вызовы Union, но я думаю, что это приведет к менее эффективному запросу, чем необходимо, когда я пытаюсь отфильтровать один тип из многих типов (например, исключить только 1 из 20 типов, используя 18). союзы).

Есть ли известный способ выполнить такой запрос, который мне не хватает?


person Triynko    schedule 22.01.2018    source источник
comment
Я действительно не хочу полагаться на что-то вроде добавления свойства «Исключить» к базовому типу таблицы и пометить его как ложное для всего, кроме одного типа, который я хочу исключить. Это негибкий подход (например, что, если мне нужно исключить один тип в одном контексте, но два других типа в другом контексте... Мне понадобится еще одно выделенное свойство).   -  person Triynko    schedule 22.01.2018
comment
Вы видите это и это?   -  person Steve Greene    schedule 22.01.2018