C# 首先查询EF代码中的两个继承类

C# 首先查询EF代码中的两个继承类,c#,linq,inheritance,ef-code-first,table-per-type,C#,Linq,Inheritance,Ef Code First,Table Per Type,我首先使用EF代码,我有两个从基类继承的类(TPT): 现在,我想创建一个查询,以在一个事务中获取其姓氏等于“SomeName”的所有人员s,以及其名称以“a”开头的所有组织s。 像这样的 IList<Party> GetParties(string name, string organizationName) { IList<Party> result = new List<Party>(); using(var context = new

我首先使用EF代码,我有两个从基类继承的类(
TPT
):

现在,我想创建一个查询,以在一个事务中获取其
姓氏等于“SomeName”的所有
人员
s,以及其
名称
以“a”开头的所有
组织
s。 像这样的

IList<Party> GetParties(string name, string organizationName)
{
   IList<Party> result = new List<Party>();   
   using(var context = new MyContext())
   { 
      var persons = context.Parties.OfType<Person>().Where(t=>t.LastName = name) ;
      var organizations = context.Parties.OfType<Organization>().Where(t=>t.Name.StartWith(organizationName));
      //return merge of persons and organizations 
   }
}
IList GetParties(字符串名称、字符串组织名称)
{
IList结果=新列表();
使用(var context=new MyContext())
{ 
var persons=context.Parties.OfType(),其中(t=>t.LastName=name);
var organizations=context.Parties.OfType(),其中(t=>t.Name.StartWith(organizationName));
//返回个人和组织的合并
}
}
有什么方法可以做到这一点吗?

你可以做到

context.Parties.OfType<Person>().Where(t=>t.LastName = name).OfType<Party>()
.Concat(context.Parties.OfType<Organization>()
               .Where(t=>t.Name.StartWith(organizationName)))
context.Parties.OfType()。其中(t=>t.LastName=name)。OfType()
.Concat(context.Parties.of type())
.Where(t=>t.Name.StartWith(organizationName)))

您不必将第二个集合强制转换为
,因为它与
IQueryable
连接在一起,它与
IQueryable

协变,我做了一些LINQPad处理,我相信这就是您想要的结果

IList<Party> GetParties(string name, string organizationName)
{       
   IList<Party> result = new List<Party>();
   using(var context = new MyContext())
   { 
      var persons = context.Parties.OfType<Person>().Where(t=>t.LastName = name) ;
      var organizations = context.Parties.OfType<Organization>().Where(t=>t.Name.StartWith(organizationName));
      //return merge of persons and organizations 

      result = (IList<Party>)persons.Union((IEnumerable<Party>)organizations);          
   }
   return result;
}
IList GetParties(字符串名称、字符串组织名称)
{       
IList结果=新列表();
使用(var context=new MyContext())
{ 
var persons=context.Parties.OfType(),其中(t=>t.LastName=name);
var organizations=context.Parties.OfType(),其中(t=>t.Name.StartWith(organizationName));
//返回个人和组织的合并
结果=(IList)个人。工会((IEnumerable)组织);
}
返回结果;
}
IList<Party> GetParties(string name, string organizationName)
{       
   IList<Party> result = new List<Party>();
   using(var context = new MyContext())
   { 
      var persons = context.Parties.OfType<Person>().Where(t=>t.LastName = name) ;
      var organizations = context.Parties.OfType<Organization>().Where(t=>t.Name.StartWith(organizationName));
      //return merge of persons and organizations 

      result = (IList<Party>)persons.Union((IEnumerable<Party>)organizations);          
   }
   return result;
}