铸造在LINQ到实体查询

问题描述:

列出 亚型

考虑三类:铸造在LINQ到实体查询

public class MyChildDto 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
} 

public class MyChildDtos : List<MyChildDto> 
{ 
    public MyChildDtos(List<MyChildDto> myChildDtos) 
     : base(myChildDtos) 
    { 
    } 
} 

public class MyParentDto 
{ 
    public int Id {get; set;} 
    public MyChildDtos Children {get; set;} 
} 

我也有实体的集合,我想查询和映射到父对象,像这样:

public MyParentDto GetParentDto(int id) 
{ 
    return DbContext.MyParentEntities.Select(p => new MyParentDto 
     { 
      Id = p.Id, 
      Children = p.MyChildEntities.Select(c => new MyChildDto 
      { 
       Id = c.Id, 
       Name = c.Name 
      }).ToList() 
     }); 
} 

(假设为参数的缘故所需要的MyChildDtos类;我只呈现一个简化的例子。)

我遇到的问题是转换的0的结果选择适当的类型。使用上面的代码,我收到一个错误,该类型不能隐式转换(从List<MyChildDto>MyChildDtos),但存在明确的转换。但是,当我尝试显式转换时,我收到一个错误,“LINQ to Entities只支持投射EDM原语或枚举类型”。同样,如果我试图明确构建MyChildDtos列表(即将选择结果传递到ctor),我会收到一个错误,表示Linq-to-Entities只支持使用查询中的默认构造函数。

是否有某种方法可以将List<MyChildDto>结果从Linq-to-Entities查询中转换为MyChildDtosList<MyChildDto>子类型)?

+0

你试过超载隐式转换操作符? (即公共静态隐式操作符MyChildDtos(List item){return new MyChildDtos(item);}) – dodald 2014-09-19 20:05:10

你只是不应该有第一个MyChildDtos类型。这里没有增加任何价值。父类型应该仅仅作为一种List键入Children

public class MyParentDto 
{ 
    public int Id {get; set;} 
    public List<MyChildDto> Children {get; set;} 
} 
+0

因为我为了举例简化了代码;为了论证的缘故,假设MyChildDtos是必要的。 – Andrew 2014-09-19 17:24:18

+2

@Andrew你应该没有必要。找到一种方法来完成这个类型正在做的事情,而不需要继承'List'。正如你已经看到了你自己,你完全不能使用它的类型,因为它坐。不知道你的实际问题是什么,我们没有办法解释你应该怎样去解决它。 – Servy 2014-09-19 17:25:12