Допустим, у меня есть User
с 2 производными сущностями Student
, Teacher
.Я использовал метод 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 requires an expression argument with a polymorphic result type that is compatible with the type argument.
Я уже смотрел некоторые ответы здесь на 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"));
}