实体框架 - 使用TPH

时间:2015-09-29 17:11:23

标签: c# entity-framework linq

我有一个班级Main,其中有ICollection种不同类型(SubASubB,父类为Parent)。我需要编写一个LINQ查询,使用table-per-hierarchy在EF中基于这些子类型进行过滤。 TPH不允许直接查询Type列,因此我试图找出解决方法。我在Parent上有一个方法来获取类型字符串。但是,LINQ不支持这一点。

如何从Main执行LINQ查询以过滤每个孩子的类型(SubASubB),以及孩子的一个额外属性?

这是获取类型的类方法:

public virtual string ReturnType()
{
    return GetType().BaseType.Name;
}

这是我尝试的LINQ查询,但由于LINQ不支持ReturnType()而失败。

// Main query defined elsewhere in function
query = query.Where(main => main.children.All(child =>
                   (child.ReturnType() == "MS" || child.ReturnType() == "TL") &&
                   child.StatusId != 4);

1 个答案:

答案 0 :(得分:3)

您可以这样做:

query = query.Where(m => m.StatusId != 4 && (m is SubA || m is SubB));

OfType

更棘手
var subQuery = query.Where(m => m.StatusId != 4);
query = subQuery.OfType<SubA>()
                .Cast<Main>()
                .Union(subQuery.OfType<SubB>().Cast<Main>());