And*_*ler 1 c# linq-to-entities
考虑三个类:
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;}
}
Run Code Online (Sandbox Code Playgroud)
我还有一个我想查询并映射到父对象的实体集合,如:
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()
});
}
Run Code Online (Sandbox Code Playgroud)
(假设为了论证需要MyChildDtos类;我只是提出一个简化的例子.)
我遇到的问题是将MyChildEntitiesSelect 的结果转换为适当的类型.与上述代码时,收到该类型不能被隐式转换的误差(从List<MyChildDto>到MyChildDtos),但是显式转换存在.但是,当我尝试显式转换时,我收到一个错误"LINQ to Entities仅支持转换EDM原语或枚举类型".类似地,如果我尝试MyChildDtos显式构造列表(即将Select结果传递给ctor),我会收到Linq-to-Entities仅支持使用查询中的默认构造函数的错误.
有没有什么方法可以将List<MyChildDto>结果从Linq-to-Entities查询中转换为MyChildDtos(List<MyChildDto>子类型)?
你不应该MyChildDtos首先拥有这种类型.它在这里没有增加任何价值.父类型应该简单地键入Children为List:
public class MyParentDto
{
public int Id {get; set;}
public List<MyChildDto> Children {get; set;}
}
Run Code Online (Sandbox Code Playgroud)