我创建了TPH代码优先tmodel,并在所需的discriminator列上添加了NotMappedAttribute。我可以将DbSets添加到我的上下文中,用于子类和查询这些类型的集合,代码优先仍然是我的朋友。
但是,假设我有一个实体,它本身包含一个BaseType集合,其中一些可能是一种类型,另一种类型。如何编写查询以获取键入的记录?顺便说一句,我不希望在延迟加载的内存集合中使用它。
假设一个名为Association的类和一些子类AssocA和AssocB,它们都映射到Associations表并在AssocationTypeId上进行区分。 现在假设你有一个实体 - 为了论证而称之为Employee。例如,
class Employee
{
public virtual Collection<Associations> MyAssociations {get;set;}
}
现在我想查询数据库以查找AssocA =?的员工。我不希望任何关联等于?但特定类型的关联。我无法使用GetType,因为LinqToEntities无法使用它。我不能使用AttributeTypeId,因为它在代码中首先使用了映射。
我缺少什么?我在做什么是合理的。但我不能模仿它。
答案 0 :(得分:5)
OfType
运营商可能正是您所寻找的:
var query = from e in context.Employees
where e.MyAssociations.OfType<AssocA>().Any()
select e;
这将只找到至少有一个AssocA
类型的关联的员工。