You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:15:02