如何手动将对象列表映射到DTO列表



我有这些:

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());

那么如何映射它的列表?

您可以使用linq Select(),因为您在问题中用于string,无需编写长扩展方法

IEnumerable<CitizenDTO> dto = citizens.Select(x => x.ToDTO());

我在完成问题之前找到了答案。只需迭代列表,并在其中添加映射的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();

最新更新