我有一个场景,我想查询一个包含两个的 ContextEntityObjects
并将结果转换为强类型的接口列表。
实体对象
public class CompanyEntity : EntityObject
{
public string Name { get; set; }
public EntityCollection<StaffEntity> Staff { get; set; }
}
public class StaffEntity : EntityObject
{
public string FullName { get; set; }
}
领域对象
public class Company : IOrganisation
{
public string Name { get; set; }
public List<IPerson> Staff { get; set; }
}
public class StaffMember : IPerson
{
public string FullName { get; set; }
}
接口
public interface IOrganisation
{
string Name { get; set; }
List<IPerson> Staff { get; set; }
}
public interface IPerson
{
string FullName { get; set; }
}
如果我忽略StaffEntity
并只查询CompanyEntity
,将其转换为 aList<IOrganisation>
是直截了当的,如下所示:
List<IOrganisation> orgs = (from c in context.Companies
select new Company
{
Name = c.Name
}).ToList<IOrganisation>();
但是,当我想查询两者EntityObjects
并将关联的StaffEntity
对象投影到StaffMember
域对象时遇到问题,然后将它们转换为List<IPerson>
以便可以将它们分配给对象的Staff
属性Company
。
我已经尝试了很多东西,我得到的最接近的是如下,但是在运行时 EF 不喜欢这个调用.ToList<IPerson>()
:
List<IOrganisation> orgs = (from c in context.Companies.Include("Staff")
select new Company
{
Name = c.Name,
Staff = (from s in c.Staff
select new StaffMember
{
FullName = s.FullName,
}).ToList<IPerson>()
}
into results
select results).ToList<IOrganisation>();
所以我基本上需要使用 LINQ to Entities 查询检索接口列表的嵌套对象图。我需要域对象作为接口列表的原因是因为它们被传递到其他程序集中,这些程序集没有引用具体的域对象或实体框架,但是它们确实引用了它们实现的接口。此外,实现接口是不合适的EntityObjects
,所以我想看看我问的问题是否可能。
提前致谢。