Filter with multiple derived classes with Code-first Entity Framework

Допустим, у меня есть Пользователь с 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"));
    }
9
задан Shawn Mclean 26 October 2011 в 11:13
поделиться