C# 实体框架-使用TPH按ICollection类型筛选LINQ
我有一个类,C# 实体框架-使用TPH按ICollection类型筛选LINQ,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个类,Main,它有一个不同类型的ICollection(SubA和SubB,父类是parent)。我需要编写一个LINQ查询,使用每个层次结构的表,根据EF中的这些子类型进行过滤。TPH不允许直接查询类型列,因此我试图找到一种解决方法。我在Parent上有一个方法来获取类型字符串。然而,LINQ不支持这一点 如何从Main执行LINQ查询,以筛选每个子项的类型(SubA和SubB),以及子项的一个附加属性 这是获取类型的类方法: public virtual string ReturnT
Main
,它有一个不同类型的ICollection
(SubA
和SubB
,父类是parent
)。我需要编写一个LINQ查询,使用每个层次结构的表,根据EF中的这些子类型进行过滤。TPH不允许直接查询类型
列,因此我试图找到一种解决方法。我在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);
您可以这样做:
query = query.Where(m => m.StatusId != 4 && (m is SubA || m is SubB));
或者使用类型为
的更为复杂:
var subQuery = query.Where(m => m.StatusId != 4);
query = subQuery.OfType<SubA>()
.Cast<Main>()
.Union(subQuery.OfType<SubB>().Cast<Main>());
var subQuery=query.Where(m=>m.StatusId!=4);
query=subQuery.OfType()的子查询
.Cast()
.Union(子查询.OfType().Cast());
您可以执行以下操作:
query = query.Where(m => m.StatusId != 4 && (m is SubA || m is SubB));
或者使用类型为的更为复杂:
var subQuery = query.Where(m => m.StatusId != 4);
query = subQuery.OfType<SubA>()
.Cast<Main>()
.Union(subQuery.OfType<SubB>().Cast<Main>());
var subQuery=query.Where(m=>m.StatusId!=4);
query=subQuery.OfType()的子查询
.Cast()
.Union(子查询.OfType().Cast());
您可以执行以下操作:
query = query.Where(m => m.StatusId != 4 && (m is SubA || m is SubB));
或者使用类型为的更为复杂:
var subQuery = query.Where(m => m.StatusId != 4);
query = subQuery.OfType<SubA>()
.Cast<Main>()
.Union(subQuery.OfType<SubB>().Cast<Main>());
var subQuery=query.Where(m=>m.StatusId!=4);
query=subQuery.OfType()的子查询
.Cast()
.Union(子查询.OfType().Cast());
您可以执行以下操作:
query = query.Where(m => m.StatusId != 4 && (m is SubA || m is SubB));
或者使用类型为的更为复杂:
var subQuery = query.Where(m => m.StatusId != 4);
query = subQuery.OfType<SubA>()
.Cast<Main>()
.Union(subQuery.OfType<SubB>().Cast<Main>());
var subQuery=query.Where(m=>m.StatusId!=4);
query=subQuery.OfType()的子查询
.Cast()
.Union(子查询.OfType().Cast());
哇,我是个白痴,这太简单了。非常感谢,我很感激!哇,我是个白痴,这太简单了。非常感谢,我很感激!哇,我是个白痴,这太简单了。非常感谢,我很感激!哇,我是个白痴,这太简单了。非常感谢,我很感激!