假设我有一个 User
,它有 2 个派生实体 Student
、Teacher
。我使用了 TPH 方法,所以我实际上在我的类(class)中根本没有属性来告诉我谁是老师。
我有 2 个 bool 值,可以让我加载学生或老师,如下所示:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
当这尝试求值时,当两者都为真时我得到这个错误:
DbIsOfExpression 需要一个具有与类型参数兼容的多态结果类型的表达式参数。
我已经在 SO 上查看了一些答案,但它们适用于一种类型的过滤。
然后我想做这样的事情(粗略的编码):
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"));
}
最佳答案
试试这个。它至少适用于 EF 5。
IQueryable<User> Filter(this IQueryable<User> query,
bool includeTeacher, bool includeStudent)
{
return query.Where(x => includeTeacher && x is Teacher
|| includeStudent && x is Student);
}
关于c# - 使用代码优先 Entity Framework 过滤多个派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7897327/