0

I have following classes in my model:

public class Party
{
     public int Id {get; set;}
}

[Table("Person")]
public class Person:Party
{
     public string FirstName {get; set;}
     public string LastName {get; set;}
}

[Table("Organization")]
public class Organization:Party
{
     public string Name {get; set;}
}

How can I query over Parties and return result as following PartyViewModel, using linq-to-entities Fluent API?

public PartyViewModel
{
    public int Id {get;set;}  
    public string FirstName {get;set;}  
    public string LastName {get;set;}  
    public string Name {get;set;}  
}

e.g if I have following records:

     Person Table
------------------------   
Id   FirstName  LastName
 0     John      Smith  


   Organization Table
------------------------   
Id          Name  
 1        Microsoft

I want to, the query returns:

         PartyViewModel  
---------------------------------
Id   FirstName  LastName    Name
 0     John      Smith      null
 1     null      null     Microsoft
Masoud
  • 8,020
  • 12
  • 62
  • 123

1 Answers1

1

Using SQL UNION should get you what you need.

var q1 = from p in db.Persons
         select new PartyViewModel {
           Id = p.Id,
           FirstName = p.FirstName,
           LastName = p.LastName,
           Name = null
         };
var q2 = from o in db.Organizations
         select new PartyViewModel {
           Id = o.Id,
           FirstName = null,
           LastName = null,
           Name = o.Name
         };

var vm = q1.Union(q2).ToList();
Alaa Masoud
  • 7,085
  • 3
  • 39
  • 57