2016-10-17 2 views
0

У меня есть следующий DTO:Преобразовать в список 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; } 
} 

У меня есть проблема с RelationQuestionGroups_Questions при преобразовании.

Вот как мой RelationQuestionGroup_QuestionDTO выглядит

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; } 
} 

Вот как преобразовать:

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; 
} 

Как вы можете видеть, я пытаюсь просто присвоить его и сделать список It , но здесь я получил ошибку кастинга. Я не уверен, как это сделать.

я получаю следующее сообщение об ошибке:

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

Любой, кто может мне помочь?

+1

_ «ошибка литья» _ - какой? Что показали ваши исследования? Вы не можете неявно преобразовать объект RelationQuestionGroups_Question в RelationQuestionGroups_QuestionDTO, вам нужно сопоставить его так же, как вы наведете карту QuestionGroupDTO. – CodeCaster

+1

Я уверен, что ошибка говорит о том, что вы не можете неявно бросать IEnumerable в IEnumerable QuietNaN

+0

@CodeCaster: Но как мне сопоставить это и добавить этот сопоставленный объект в QuestionGroupDTO? – Bryan

ответ

0

Вы забыли карту RelationQuestionGroups_Questions в 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; 
} 
+0

Как насчет виртуального QuestionDTO внутри RelationQuestionGroups? – Bryan

+0

Вы также должны нанести на карту его, Question = new QuestionDTO {ID = rq.Question.ID ...} – QuietNaN

1

У тебя отличный старт в отображении, но в RelationQuestionGroups_Questions = src.RelationQuestionGroups_Questions.ToList(), вы пытаетесь присвоить List<Entity> к List<Dto>. Вы не можете этого сделать.

Вам также нужно сопоставить любые не примитивные свойства. Вы можете сделать это так:

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

Затем добавить метод для отображения RelationQuestionGroups_Question в RelationQuestionGroups_QuestionDTO:

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

И тогда вы будете идти смотреть на AutoMapper автоматизировать этот процесс.

+0

И я должен сделать это с помощью QuestionDTO (внутри RelationQuestionGroups_QuestionDTO) тоже? – Bryan

+0

@Bryan да, вам нужно сопоставить любой не примитивный (вернее, любой тип, для которого не существует неявного преобразования в целевой тип). – CodeCaster

+0

Okey. Но как добавить сопоставленный QuestionDTO в RelationQuestionGroups_Questions? Вы используете. Выберите (ToDTO) для RelationQuestionGroups. Но как насчет QuestionDTO? Должен ли я назвать это изнутри ToDTO? – Bryan

Смежные вопросы