如何在对象初始化时实现Application到ApplicationDTO的列表属性转换?
在对象初始化时完成业务对象到DTO的列表转换
你可以通过LINQ的Select方法在DTO的对象初始化器里直接完成列表转换,不需要额外的for循环。注意你的示例代码里有个小问题:ApplicationList是List<Application>类型,需要先取出单个Application实例(比如取第一个或按业务逻辑筛选),再进行映射。
完整示例代码如下:
// 获取业务对象列表 List<Application> ApplicationList = await _dbContextDigitVP.Applications.FromSqlRaw("Exec dbo.GetApplication {0}", id).ToListAsync(); // 取出目标业务对象(根据实际逻辑调整,比如取第一个或指定元素) var targetApplication = ApplicationList.FirstOrDefault(); // 直接在对象初始化时完成所有字段映射,包括列表 ApplicationDTO applicationDTO = new ApplicationDTO { ApplicationNumber = targetApplication?.ApplicationNumber, Country = targetApplication?.Country, ApplicationUuid = targetApplication?.ApplicationUuid, PwEmployeeAdUserName = targetApplication?.PwEmployeeAdUserName, Category = targetApplication?.Category != null ? new ApplicationCategoryDTO { Category = targetApplication.Category.Category } : null, // 核心:用Select遍历原列表并转换每个元素,再转成List Applicants = targetApplication?.Applicants? .Select(applicant => new ApplicantDTO { // 这里填写Applicant到ApplicantDTO的字段映射,示例: ApplicantId = applicant.ApplicantId, FullName = applicant.FullName, ContactEmail = applicant.ContactEmail // 其他需要映射的字段 }) .ToList() ?? new List<ApplicantDTO>() };
关键说明:
Select(applicant => new ApplicantDTO { ... })会遍历原Applicants列表的每个元素,将其转换为ApplicantDTO类型ToList()把LINQ查询结果转换成List<ApplicantDTO>,匹配DTO的属性类型要求- 链式的
?.和??运算符用来处理原对象或原列表为null的情况,避免空引用异常
如果后续有大量类似的对象转换需求,也可以考虑使用AutoMapper这类映射库简化代码,但上述方式完全能满足你在对象初始化时完成列表转换的需求。
内容的提问来源于stack exchange,提问作者Florent
相关产品推荐
相关产品推荐

