铸造在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查询中转换为MyChildDtos
(List<MyChildDto>
子类型)?
答
你只是不应该有第一个MyChildDtos
类型。这里没有增加任何价值。父类型应该仅仅作为一种List
键入Children
:
public class MyParentDto
{
public int Id {get; set;}
public List<MyChildDto> Children {get; set;}
}
你试过超载隐式转换操作符? (即公共静态隐式操作符MyChildDtos(List item){return new MyChildDtos(item);}) –
dodald
2014-09-19 20:05:10