C#如何用LINQ将3个列表按索引合并为统一查询结果或新列表
问题解答
1. 关联可行性说明
完全可以按索引关联三个列表,只要三个列表长度一致、相同索引位的元素互相对应,不管是普通循环还是LINQ都可以实现关联查询,也能生成包含所有数据的新列表。
2. 前置准备
建议先定义强类型实体类存储合并后的数据,后续操作更方便:
public class SelfStudyRecord { public DateTime StudyDate { get; set; } public string ModuleName { get; set; } public double StudyHours { get; set; } }
3. 具体实现方案
方案1:普通for循环实现(易调试,兼容性好)
List<SelfStudyRecord> studyRecords = new List<SelfStudyRecord>(); // 先校验三个列表长度一致,避免索引越界 if (SelfStudyModuleName.Count == SelfStudySesionHours.Count && SelfStudyModuleName.Count == SelfStudySesiondate.Count) { for (int i = 0; i < SelfStudyModuleName.Count; i++) { studyRecords.Add(new SelfStudyRecord { StudyDate = SelfStudySesiondate[i], ModuleName = SelfStudyModuleName[i], StudyHours = SelfStudySesionHours[i] }); } }
方案2:LINQ实现(写法简洁)
通过连续调用Zip方法按索引拼接三个序列即可:
var studyRecords = SelfStudySesiondate .Zip(SelfStudyModuleName, (date, name) => new { date, name }) .Zip(SelfStudySesionHours, (prev, hours) => new SelfStudyRecord { StudyDate = prev.date, ModuleName = prev.name, StudyHours = hours }).ToList();
4. 格式化输出
拿到合并后的列表后,直接循环输出即可得到你需要的格式:
foreach (var record in studyRecords) { Console.WriteLine($"{record.StudyDate:yyyy/MM/dd} {record.ModuleName,-10}{record.StudyHours}"); }
注意:使用前必须确保三个列表长度完全相同,且相同索引位置的元素是一一对应关系,否则会出现数据错位或索引越界问题。
内容的提问来源于stack exchange,提问作者Dominique Parkin
相关产品推荐
相关产品推荐

