Допустим, у меня есть Пользователь
с 2 производными сущностями Студент
, Преподаватель
. Я использовал метод TPH, поэтому у меня фактически нет никаких свойств в моих классах, чтобы сказать мне, кто является учителем, а кто нет.
У меня есть 2 булевых значения, которые должны позволить мне загружать либо ученика, либо учителя, например, так:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
Когда это пытается оценить, я получаю эту ошибку, когда оба значения истинны:
DbIsOfExpression требует аргумента выражения с полиморфным типом результата, который совместим с аргументом типа.
Я уже просмотрел некоторые ответы здесь на SO, но они ориентированы на 1 тип фильтрации.
Я бы хотел сделать что-то вроде этого (грубое кодирование):
if(query.ToList().FirstOrDefault() is Student)
{
print "student";
}
Отображение:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>()
.Map<Teacher>(m => m.Requires("UserType").HasValue("Teach"))
.Map<Student>(m => m.Requires("UserType").HasValue("Stu"))
.Map<Staff>(m => m.Requires("UserType").HasValue("Staff"));
}