1

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

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 类型的对象。如果我删除 Concat 调用并单独运行它们,我会得到正确的类型(经理或员工)。

我在这里做错了什么?我编写了一些测试代码,通过制作对象的虚拟列表并在它们上调用 AsQueryable,然后进行投影,从而从等式中删除了 Linq,并且它应该正常工作。

4

0 回答 0