C# AutoMapper ProjectTo:不使用嵌套对象

C# AutoMapper ProjectTo:不使用嵌套对象,c#,linq,automapper,C#,Linq,Automapper,我有以下dto: public class SingleForm { // other props left out for brevity public List<Filter> Filters { get; set; } } 通常,我认为最好避免在配置文件配置中调用Mapper.Map()。考虑到这一点,我认为将第一个映射更改为以下内容可能会有所帮助: CreateMap<Form, SingleForm>() .ForMember(des

我有以下dto:

public class SingleForm
{
    // other props left out for brevity

    public List<Filter> Filters { get; set; }
}

通常,我认为最好避免在配置文件配置中调用Mapper.Map()。考虑到这一点,我认为将第一个映射更改为以下内容可能会有所帮助:

CreateMap<Form, SingleForm>()
    .ForMember(dest => dest.Filters,
        opts => opts.MapFrom(src => src.Questions));
CreateMap()
.ForMember(dest=>dest.Filters,
opts=>opts.MapFrom(src=>src.Questions));

如果映射发生在DbContext之外,那么应该使用includes方法检索所有关系项,这些关系项在没有DbContext的情况下无法延迟加载。

这就是ProjectTo()的要点-请参阅
var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .ProjectTo<SingleForm>()
    .FirstOrDefault();
var query = this.context.Forms
    .Where(e => e.Id == message.FormId)
    .Select(e => new SingleForm
    {
        Id = e.Id,
        Filters = e.Questions.Select(q =>
            new Filter { 
                Header = q.Question.QuestionText 
        }).ToList()
    })
    .FirstOrDefault();
CreateMap<Form, SingleForm>()
    .ForMember(dest => dest.Filters,
        opts => opts.MapFrom(src => src.Questions));