Как вручную сопоставить Список объектов со списком DTO? - PullRequest
1 голос
/ 29 июня 2019

У меня есть такие:

public class FamilyHead
{
    public Guid HeadId { get; set; }
    public string Name { get; set; }
}

public class Citizen
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public short Age { get; set; }
    // more properties
    [ForeignKey("FamilyHead")]
    public Guid HeadId { get; set; }

    public virtual FamilyHead FamilyHead { get; set; }
}

public class CitizenDTO
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public short Age { get; set; }
    public Guid HeadId
    public string HeadName { get; set; }
}

Я могу вручную сопоставить его с помощью метода расширения, если это единственный экземпляр:

public static CitizenDTO ToDTO(this Citizen citizen)
{
    if (citizen == null) return null;

    return new CitizenDTO {
        Id = citizen.Id,
        Name = citizen.Name,
        HeadId = citizen.HeadId,
        HeadName = citizen.FamilyHead.Name
    }   
}

var dto = aCitizen.ToDTO();

Но как отобразить список граждан?Я думаю, что Select() может сделать эту работу, но я знаю, как это сделать, только если модель и dto имеют одинаковую структуру.Как в этом примере:

IEnumerable<int> integers = new List<int>() { 1, 2, 3, 4, 5 };
IEnumerable<string> strings = integers.Select(i => i.ToString());

Так как отобразить его список?

Ответы [ 2 ]

2 голосов
/ 29 июня 2019

Вы можете использовать Linq Select(), как вы использовали для string в своем вопросе, нет необходимости писать длинный метод расширения

IEnumerable<CitizenDTO> dto = citizens.Select(x => x.ToDTO());
0 голосов
/ 29 июня 2019

Я нашел ответ, прежде чем закончить свой вопрос.Просто переберите список и добавьте в него сопоставленный DTO.Глупый я

// Extension method
public static IEnumerable<CitizenDTO> ToDTO(this IEnumerable<Citizen> citizens)
{
    if (citizen == null) return null;

    var dto = new List<CitizenDTO>();

    foreach(var citizen in citizens) {
        dto.Add(citizen.ToDTO());   
    }

    return dto;
}

// How to use
IEnumerable<CitizenDTO> result = listOfCitizens.ToDTO();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...