我有一个班级Main
,其中有ICollection
种不同类型(SubA
和SubB
,父类为Parent
)。我需要编写一个LINQ查询,使用table-per-hierarchy在EF中基于这些子类型进行过滤。 TPH不允许直接查询Type
列,因此我试图找出解决方法。我在Parent
上有一个方法来获取类型字符串。但是,LINQ不支持这一点。
如何从Main
执行LINQ查询以过滤每个孩子的类型(SubA
和SubB
),以及孩子的一个额外属性?
这是获取类型的类方法:
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);
答案 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>());