如何手动将对象列表映射到 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());

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


largeQ
浏览 163回答 2
2回答

长风秋雁

Select()您可以像在问题中使用的那样使用 Linq&nbsp;string,无需编写长扩展方法IEnumerable<CitizenDTO>&nbsp;dto&nbsp;=&nbsp;citizens.Select(x&nbsp;=>&nbsp;x.ToDTO());

GCT1015

我在完成问题之前找到了答案。只需遍历列表并向其添加映射的 DTO。傻我// Extension methodpublic static IEnumerable<CitizenDTO> ToDTO(this IEnumerable<Citizen> citizens){&nbsp; &nbsp; if (citizen == null) return null;&nbsp; &nbsp; var dto = new List<CitizenDTO>();&nbsp; &nbsp; foreach(var citizen in citizens) {&nbsp; &nbsp; &nbsp; &nbsp; dto.Add(citizen.ToDTO());&nbsp; &nbsp;&nbsp; &nbsp; }&nbsp; &nbsp; return dto;}// How to useIEnumerable<CitizenDTO> result = listOfCitizens.ToDTO();
打开App,查看更多内容
随时随地看视频慕课网APP