如何用C#(含LINQ)按条件将TrackList数组转存到TrackListMain数组
解决方案
首先,假设你的两个模型定义如下(如果已定义可忽略):
public class TrackList { public int Id { get; set; } public string Name { get; set; } public int? Apr_By { get; set; } public int? Reg_By { get; set; } } public class TrackListMain { public int Id { get; set; } public string Name { get; set; } public string Status { get; set; } }
你可以用LINQ的SelectMany方法实现需求,它能把单条原记录映射为多条目标记录,完美匹配你的转换规则:
// 从数据库获取数据后执行转换 var dbArray = await _SQLHelper.GetRecords<TrackList>("[TASKLIST]", parameters); IEnumerable<TrackListMain> mainArray = dbArray.SelectMany(track => { var result = new List<TrackListMain>(); // 规则2:apr_by不为null时添加status为"AB"的记录 if (track.Apr_By != null) { result.Add(new TrackListMain { Id = track.Id, Name = track.Name, Status = "AB" }); } // 规则3:reg_by不为null时添加status为"RB"的记录 if (track.Reg_By != null) { result.Add(new TrackListMain { Id = track.Id, Name = track.Name, Status = "RB" }); } // 规则1:两者都为null时添加status为null的记录 if (track.Apr_By == null && track.Reg_By == null) { result.Add(new TrackListMain { Id = track.Id, Name = track.Name, Status = null }); } return result; });
说明
SelectMany会遍历每条TrackList记录,将其转换为对应的TrackListMain集合,最终合并成一个完整的IEnumerable<TrackListMain>。- 按规则顺序判断,确保不会遗漏或重复生成记录,完全匹配你给出的示例数据转换结果。
内容的提问来源于stack exchange,提问作者Lim
相关产品推荐
相关产品推荐

