Powiedzmy, że mam User
z 2 elementami pochodnymi: Student
, Teacher
. Użyłem metody TPH, więc w rzeczywistości nie mam żadnej własności na zajęciach, aby powiedzieć mi, kto jest nauczycielem, czy nie.Filtr z wieloma klasami pochodnymi z Code-first Entity Framework
Mam 2 wartości logicznych, które powinny pozwolić mi załadować albo ucznia lub nauczyciela, takie jak ten:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
Gdy ta stara się ocenić, otrzymuję ten błąd, gdy oba są prawdziwe:
DbIsOfExpression requires an expression argument with a polymorphic result type that is compatible with the type argument.
Już sprawdziłem niektóre odpowiedzi tutaj na SO, ale są one ukierunkowane na 1 rodzaj filtrowania.
bym wtedy zrobić coś tak (szorstkiej Coding):
if(query.ToList().FirstOrDefault() is Student)
{
print "student";
}
Odwzorowanie:
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"));
}
Czy możesz pokazać nam swoje zajęcia? Czy korzystasz najpierw z kodu? Jakiś kod mapowania, który możesz udostępnić? –
Co to jest "zapytanie"? –
@LadislavMrnka Dodałem zapytanie typu –