0

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

public class Party
{
   public int PartyId {get; set;}
}
public Person:Party
{
   string FirstName { get; set; }  
   string LastName { get; set; }  
} 
public Organization:Party
{
   string Name { get; set; }  
} 

现在,我想创建一个查询以在一个事务中获取Person它们LastName的 s 等于“SomeName”的所有Organizations 以及它们Name以“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 
   }
}

有没有办法做到这一点?

4

2 回答 2

1

你可以做

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

您不必将第二个集合转换为,Party因为它与一个IQueryable<Party>IQueryable<Organization>.

于 2013-10-29T19:44:22.863 回答
-1

我做了一些 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;
}
于 2013-10-29T19:45:17.723 回答