考虑三个类:
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类;我只是提供一个简化的例子。)
我遇到的问题是将MyChildEntities
Select的结果转换为适当的类型。使用上面的代码,我收到一个错误,该类型无法隐式转换(从List<MyChildDto>
到MyChildDtos
),但存在显式转换。但是,当我尝试显式转换时,我收到一个错误,&#34; LINQ to Entities仅支持转换EDM原语或枚举类型&#34;。类似地,如果我尝试显式构造MyChildDtos
列表(即将Select结果传递给ctor),我会收到Linq-to-Entities仅支持使用查询中的默认构造函数的错误。
我是否可以通过某种方式将List<MyChildDto>
结果转换为Linq-to-Entities查询中的MyChildDtos
(List<MyChildDto>
子类型)?
答案 0 :(得分:7)
你不应该首先拥有MyChildDtos
类型。它在这里没有增加任何价值。父类型应该只需键入Children
作为List
:
public class MyParentDto
{
public int Id {get; set;}
public List<MyChildDto> Children {get; set;}
}