我需要将EF实体映射到各自的DTO。在下面的示例中,我具有EF实体Parent和Child,并且Child实体包含对Parent对象的引用。我也有ParentDto和ChildDto(DTO),并且ChildDto包含对ParentDto(不是Parent)的引用。因此,如何在以下方法中将ParentDto引用分配给ChildDto实例:

public Task<List<ParentDto>> Method()
{
    return (Context.Set<Parent>()
        .Where(someCondition)
        .Select(p => new ParentDto
        {
            // here we map all properties from Parent to ParentDto
            ... ,
            Children = p.Children.Select(c => new ChildDto
            {
                // here we map all properties from Child to ChildDto
                ... ,
                Parent = ? // reference to newly created ParentDto instance
            })
        }).ToListAsync();
}

最佳答案

您必须使用变量,但不能在lambda表达式中使用它。您必须在调用ToListAsync()后在内存中进行映射:

public Task<List<ParentDto>> Method()
{
    var parents = await (Context.Set<Parent>()
                                .Where(someCondition)
                                .ToListAsync());
    return parents.Select(p =>
    {
        var parent = new ParentDto();
        //map parent properties
        parent.Children = p.Children.Select(c => new ChildrenDto
        {
            //map child properties
        });
       return parent;
    }).ToList();
}

08-25 22:27