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

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>子类型)?

Ser*_*rvy 7

你不应该MyChildDtos首先拥有这种类型.它在这里没有增加任何价值.父类型应该简单地键入ChildrenList:

public class MyParentDto
{
    public int Id {get; set;}
    public List<MyChildDto> Children {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

  • @Andrew你应该没有必要.找到一种方法来完成该类型正在做的任何事情,而无需子类化`List`.正如你自己已经看过的那样,你很可能根本就不能使用这种类型.在不知道你的实际问题是什么的情况下,我们无法解释你应该如何解决它. (2认同)