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

Ann*_*hri 2 c# linq asp.net-mvc

我有这些:

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; }
}
Run Code Online (Sandbox Code Playgroud)

如果它是单个实例,我可以通过扩展方法手动映射它:

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();
Run Code Online (Sandbox Code Playgroud)

但如何绘制公民列表呢?我认为Select()可能可以完成这项工作,但我只知道如果模型和 dto 具有相同的结构,该怎么做。就像这个例子:

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

那么如何映射一个列表呢?

Pra*_*kar 5

Select()您可以像在问题中使用的那样使用 Linq string,无需编写长扩展方法

IEnumerable<CitizenDTO> dto = citizens.Select(x => x.ToDTO());
Run Code Online (Sandbox Code Playgroud)