如何将数据扁平化为基于SubmissionRequestFiles数量的视图模型列表
需求说明
需要将现有数据扁平化为视图模型列表,视图模型的数量需与SubmissionRequestFiles的数量完全一致。例如:若存在2个SubmissionRequestFiles实例,则必须生成2个SubmissionRequestViewModel实例。
当前错误实现
SubmissionRequestViewModel vm = new SubmissionRequestViewModel(); vm.SubmissionId = sr.SubmissionId; foreach (var file in sr.SubmissionRequestFiles) { vm.SubmissionRequestFilesName = file.SubmissionRequestFilesName; }
这段代码仅创建1个SubmissionRequestViewModel实例,循环过程中会反复覆盖SubmissionRequestFilesName的值,最终仅保留最后一个文件的名称,完全无法满足生成对应数量视图模型的需求。
正确实现方式
常规循环写法
通过遍历SubmissionRequestFiles,为每个文件创建独立的视图模型实例,再将实例收集为列表:
List<SubmissionRequestViewModel> vmList = new List<SubmissionRequestViewModel>(); foreach (var file in sr.SubmissionRequestFiles) { SubmissionRequestViewModel vm = new SubmissionRequestViewModel(); vm.SubmissionId = sr.SubmissionId; vm.SubmissionRequestFilesName = file.SubmissionRequestFilesName; vmList.Add(vm); }
LINQ简化写法(需引用System.Linq)
利用LINQ的Select方法快速映射生成视图模型列表:
using System.Linq; // ... List<SubmissionRequestViewModel> vmList = sr.SubmissionRequestFiles .Select(file => new SubmissionRequestViewModel { SubmissionId = sr.SubmissionId, SubmissionRequestFilesName = file.SubmissionRequestFilesName }) .ToList();
内容的提问来源于stack exchange,提问作者Jefferson
相关产品推荐
相关产品推荐

