简体   繁体   中英

Convert to DTO list property

I have the following DTO:

public class QuestionGroupDTO : IBaseDTO
{
    public string Description { get; set; }
    public string Header { get; set; }
    public Guid Id { get; set; }
    public int Order { get; set; }
    public IEnumerable<Services.Forms.Models.RelationForm_QuestionGroupDTO> RelationForms_QuestionGroups { get; set; }
    public IEnumerable<RelationQuestionGroup_QuestionDTO> RelationQuestionGroups_Questions { get; set; }
}

I have problem with the RelationQuestionGroups_Questions while converting.

Here Is how my RelationQuestionGroup_QuestionDTO looks like

public class RelationQuestionGroup_QuestionDTO
{
    public int Order { get; set; }
    [Required]
    public Guid QuestionGroupId { get; set; }
    [Required]
    public Guid QuestionId { get; set; }

    public virtual QuestionGroupDTO QuestionGroup { get; set; }
    public virtual QuestionDTO Question { get; set; }
}

Here Is how I convert:

public static QuestionGroupDTO ToDTO(this QuestionGroup src)
{
    var dto = new QuestionGroupDTO
    {
        Id = src.Id,
        Header = src.Header,
        Description = src.Description,
        RelationQuestionGroups_Questions = src.RelationQuestionGroups_Questions.ToList()
    };
    return dto;
}

As you can see, I'm trying to just assign It and make a list of It, but I got a casting error here. I'm not sure how to do this.

I get the following error:

Cannot implicity convert type Generic List to System.Collections.Generic.IEnumerble

You're having a great start at mapping, but at RelationQuestionGroups_Questions = src.RelationQuestionGroups_Questions.ToList() , you're trying to assign a List<Entity> to List<Dto> . You can't do that.

You need to map any non-primitive properties as well. You can do that like this:

public static QuestionGroupDTO ToDTO(this QuestionGroup src)
{
    var dto = new QuestionGroupDTO
    {
        // ...
        RelationQuestionGroups_Questions = src.RelationQuestionGroups_Questions
                                              .Select(ToDTO)
                                              .ToList()
    };
    return dto;
}

Then you add a method to map RelationQuestionGroups_Question to RelationQuestionGroups_QuestionDTO :

public RelationQuestionGroups_QuestionDTO ToDTO(RelationQuestionGroups_Question entity)
{
    return new RelationQuestionGroups_QuestionDTO
    {
        Order = entity.Order,
        // ...
    };
}

And then you'll go look at AutoMapper to automate this.

You forgot to map RelationQuestionGroups_Questions to RelationQuestionGroup_QuestionDTO .

public static QuestionGroupDTO ToDTO(this QuestionGroup src)
{
    var dto = new QuestionGroupDTO
    {
        Id = src.Id,
        Header = src.Header,
        Description = src.Description,
        RelationQuestionGroups_Questions = src.RelationQuestionGroups_Questions.Select(rq => new RelationQuestionGroup_QuestionDTO
            {
                Order = rq.Order,
                QuestionGroupId = rq.QuestionGroupId,
                QuestionId = rq.QuestionId
            }).ToList()
        };
    return dto;
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM