假设我有一个名为
我有两个布尔值,应该允许我加载学生或老师,如下所示:
当两个条件都为真时,这段代码尝试进行求值时会出现以下错误:
然后,我想做类似于以下的事情(粗略编码):
映射关系如下:
User
的对象,它有两个派生实体Student
和Teacher
。我使用了TPH方法,因此我的类中实际上没有任何属性可以告诉我谁是老师或学生。我有两个布尔值,应该允许我加载学生或老师,如下所示:
//IQueryable<User>
var query = userRepository.GetUsers();
//Type filtering
if (searchModel.IsStudent)
{
query = query.OfType<Student>();
}
if (searchModel.IsTeacher)
{
query = query.OfType<Teacher>();
}
当两个条件都为真时,这段代码尝试进行求值时会出现以下错误:
DbIsOfExpression 需要一个表达式参数,其多态结果类型与类型参数兼容。
我已经查看了一些 Stack Overflow 上的答案,但它们都是针对一种类型的过滤。然后,我想做类似于以下的事情(粗略编码):
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"));
}
Student
和Teacher
。如果你想要同时过滤两者,你需要一个逻辑OR而不是链接查询(表示逻辑AND)。 - Slauma