У меня есть ситуация, когда я пытаюсь отфильтровать выбор LINQ, используя производный подкласс.
ctx.BaseEntity.OfType<SubClass>()
- отлично работает.
Однако я бы хотел сделать это, используя вместо этого строковое значение. Я столкнулся с барьером в производительности, когда у меня много (> 20) подклассов, и выбор сущности без использования OfType просто не подходит. У меня есть общий интерфейс, который отображается из базового класса, поэтому я не знаю, какой тип класса будет возвращен во время компиляции.
Итак, что я хотел бы сделать, это:
- Выполнить проекцию Выбрать, где я
вернуть только SubClassType из
база данных
Выполнить второй выбор
используя это значение в качестве OfType для
выберите только соответствующие
сущность из базы данных (без массы
созданы союзы)
int id = 1;
var classType = (from c in ctx.BaseClass.Include("ClassType")
where c.id == id
select new
{
c.ClassType.TypeName
}).First();
BaseClass caseQuery = ctx.BaseClass.OfType<classType.TypeName>()
.Include("ClassType")
.Include("ChildEntity1")
.Include("ChildEntity2")
.Where(x => x.id== id);
Но, очевидно, это не сработает, потому что OfType требует Type, а не строку.
Есть идеи, как мне этого добиться?
Обновление:
В качестве примечания к исходному вопросу выясняется, что в тот момент, когда вы проецируете запрос, использующий свойство навигации, - он также создает монстр SQL, поэтому я в итоге использовал хранимую процедуру для заполнения своей сущности ClassType из BaseClass. Id.