在Linq-to-Entities查询中转换为List <t>子类型</t>

时间:2014-09-19 17:19:27

标签: 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;}
}

我还有一组我想查询并映射到父对象的实体,如:

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查询中的MyChildDtosList<MyChildDto>子类型)?

1 个答案:

答案 0 :(得分:7)

你不应该首先拥有MyChildDtos类型。它在这里没有增加任何价值。父类型应该只需键入Children作为List

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