【问题标题】:Query on two inherited classes in EF Code First在 EF Code First 中查询两个继承的类
【发布时间】:2013-10-29 19:18:24
【问题描述】:

我首先使用 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; }  
} 

现在,我想创建一个查询来获取所有Persons,他们的LastNames 等于“SomeName”,以及所有Organizations,他们的Name 在一个事务中以“A”开头。 像这样的

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 
   }
}

有什么办法吗?

【问题讨论】:

    标签: c# linq inheritance ef-code-first table-per-type


    【解决方案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&lt;Party&gt; 连接,后者与 IQueryable&lt;Organization&gt; 协变。

    【讨论】:

      【解决方案2】:

      我做了一些 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;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-26
        • 1970-01-01
        • 2014-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多