C# 每个层次投影联合的C表

C# 每个层次投影联合的C表,c#,linq,entity-framework,union,table-per-hierarchy,C#,Linq,Entity Framework,Union,Table Per Hierarchy,我使用每个层次的表来投影到模型类。当我在Linq to实体中使用类型时,我的所有结果总是最后一个投影的类型。我的意思是,如果我有这些领域模型: public interface IPerson { string Name {get;set;} } public abstract class Person : IPerson { public string Name { get;set; } } public class Employee : Person{ } public class Mana

我使用每个层次的表来投影到模型类。当我在Linq to实体中使用类型时,我的所有结果总是最后一个投影的类型。我的意思是,如果我有这些领域模型:

public interface IPerson { string Name {get;set;} }
public abstract class Person : IPerson { public string Name { get;set; } }
public class Employee : Person{ }
public class Manager : Person { }
我有一个带有名称和类型列的Person表,并使用每个层次结构的表来生成特定的实体,我将其称为EmployeeEntity和ManagerEntity

当我使用此代码时:

IQueryable<IPerson> people = entities.OfType<ManagerEntity>().Select(x => new Manager 
{ Name = x.name }).Concat(entities.OfType<EmployeeEntity>().Select(y => new Employee
{ Name = y.name }));

var projectedPeople = people.ToList();
projectedPeople中所有类型的对象都是Employee,甚至应该是Manager类型的对象也是Employee。如果我删除Concat调用并单独运行它们,我将获得正确的经理或员工类型


我做错了什么?我编写了一些测试代码,通过生成对象的虚拟列表并对其调用AsQueryable,然后是一个投影,将Linq从等式中删除,这一切都正常工作。

我注意到,如果我通过这样做将对象带入内存,IQueryable people=entities.OfType.Selectx=>new Manager{Name=x.Name}ToList.concatenties.OfType.Selecty=>newemployee{Name=y.Name}.ToList;它返回适当的类型。然而,在这一点上,把所有的事情都记在记忆中对我来说并不是一个解决办法。