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();
您可以使用LinqSelect()
,就像您在问题中用于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哦,天哪,我当时打错了。它应该调用一个方法。谢谢你指出这一点谢谢你的更新,我也更新了我的答案