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

C# 如何手动将对象列表映射到DTO列表?,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我有: public class FamilyHead { 公共Guid头ID{get;set;} 公共字符串名称{get;set;} } 公共阶层公民 { 公共Guid Id{get;set;} 公共字符串名称{get;set;} 公共短期{get;set;} //更多属性 [外侨(“家族首领”)] 公共Guid头ID{get;set;} 公共虚拟FamilyHead FamilyHead{get;set;} } 公共阶层公民 { 公共Guid Id{get;set;} 公共字符串名称{get

我有:

public class FamilyHead
{
公共Guid头ID{get;set;}
公共字符串名称{get;set;}
}
公共阶层公民
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共短期{get;set;}
//更多属性
[外侨(“家族首领”)]
公共Guid头ID{get;set;}
公共虚拟FamilyHead FamilyHead{get;set;}
}
公共阶层公民
{
公共Guid Id{get;set;}
公共字符串名称{get;set;}
公共短期{get;set;}
公共Guid头ID
公共字符串头名{get;set;}
}
如果是单个实例,我可以通过扩展方法手动映射:

public static CitizenDTO ToDTO(此公民)
{
如果(citizen==null)返回null;
将新公民返回到{
Id=citizen.Id,
Name=citizen.Name,
HeadId=citizen.HeadId,
HeadName=citizen.FamilyHead.Name
}   
}
var dto=aCitizen.ToDTO();
但如何绘制公民名单呢?我认为
Select()
可以完成这项工作,但我只知道在模型和数据具有相同结构的情况下如何完成。像这个例子:

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

那么如何绘制它的列表呢?

在完成我的问题之前,我找到了答案。只需遍历列表并将映射的DTO添加到其中。愚蠢的我

//扩展方法
公共静态IEnumerable ToDTO(此IEnumerable citizens)
{
如果(citizen==null)返回null;
var dto=新列表();
foreach(公民中的公民变量){
添加(citizen.ToDTO());
}
返回dto;
}
//如何使用
IEnumerable result=listOfCitizens.ToDTO();

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

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

请在您的
Citizen
类中使用
ToDTO
属性更新您的问题。。如果你仔细研究你的问题,你就错过了。如果
Citizen
类中没有
ToDTO
的属性,那么这两个答案都会给出
编译时错误
@prasadelkikikikar,它是一个扩展方法
ToDTO()
。所以我不必为它添加新属性。也许你的答案应该调用这个方法?你的扩展方法和我在回答中写的
Select
语句是一样的。i、 e.
dto.Add(citizen.ToDTO)在foreach中loop@PrasadTelkikar哦,天哪,我当时打错了。它应该调用一个方法。谢谢你指出这一点谢谢你的更新,我也更新了我的答案