如果我有一个Employee实体,那么派生实体类型如下:
class Employee
{ // ...
}
class FireWarden : Employee
{ // ...
}
class KeyHolder : Employee
{ // ...
}
如何查询既不消防监护人或密钥持有人,也不是任何其他特殊类型员工的员工?
我尝试过的一些事情:
Employees.OfType<Employee>(). ...
返回所有员工(正如您所期望的那样)。
Employees.Where(e => (e.GetType() == TypeOf(Employee)). ...
因运行时错误而失败,说实体框架的内容不支持GetType()。
我可以写
var normalEmployees = Employees.Where(e => !(e is FireWarden || e is KeyHolder));
但是如果我引入一个派生自Employee的新实体,我需要确保更新所有这些查询以排除新类型。
我想我可以添加一个“SpecialEmployee”类,派生自Employee,并从中派生出其他类型。然后我不必更新所有查询,但这感觉有点像尾巴摇着狗。
答案 0 :(得分:1)
如果普通员工不能成为FireWarden或KeyHolder,那么您可以为NormalEmployee创建一个特殊类型
考虑以下
class Employee
{ // ...
}
class NormalEmployee: Employee
{
//
}
class FireWarden : Employee
{ // ...
}
class KeyHolder : Employee
{ // ...
}
Employees.OfType<NormalEmployee>()