将 3 个列表组合成 1 个 LINQ 查询 C#
Posted
技术标签:
【中文标题】将 3 个列表组合成 1 个 LINQ 查询 C#【英文标题】:Combining 3 list into 1 LINQ Query C# 【发布时间】:2021-11-12 16:54:32 【问题描述】:我是编程新手,我想知道是否可以将索引上的 3 个不同表加入到一个查询结果中。或者,如果不能使用 LINQ 加入,我可以创建一个由 3 个列表的数据组成的新列表。
(Ps. 列表的内容将由用户输入,项目的数量可以非常频繁地运行,但列表中的项目数量将始终相同)
这些是 3 个列表:
List<string> SelfStudyModuleName = new List<string>();
public List<double> SelfStudySesionHours = new List<double>();
public List<DateTime> SelfStudySesiondate = new List<DateTime>();
每个列表的样本数据:
SelfStudyModuleName.Add("Prog");
SelfStudyModuleName.Add("Cloud");
SelfStudyModuleName.Add("Database");
SelfStudyModuleName.Add("Geo");
SelfStudySesionHours.Add(2);
SelfStudySesionHours.Add(5);
SelfStudySesionHours.Add(3);
SelfStudySesionHours.Add(6);
SelfStudySesiondate[0]=2021/12/01;
SelfStudySesiondate[1]=2021/12/02;
SelfStudySesiondate[2]=2021/12/03;
SelfStudySesiondate[3]=2021/12/04;
期望结果的样本:
2021/12/01 Prog 2
2021/12/02 Cloud 5
2021/12/03 DataBase 3
2021/12/04 Geo 6
【问题讨论】:
【参考方案1】:如果您不想开设其他课程,您可以这样做。否则请参阅@Serge 的回答
var SelfStudyModuleName = new List<string>();
var SelfStudySesionHours = new List<double>();
var SelfStudySesiondate = new List<DateTime>();
SelfStudyModuleName.Add("Prog");
SelfStudyModuleName.Add("Cloud");
SelfStudyModuleName.Add("Database");
SelfStudyModuleName.Add("Geo");
SelfStudySesionHours.Add(2);
SelfStudySesionHours.Add(5);
SelfStudySesionHours.Add(3);
SelfStudySesionHours.Add(6);
SelfStudySesiondate[0] = new DateTime(2021, 12, 1);
SelfStudySesiondate[1] = new DateTime(2021, 12, 2);
SelfStudySesiondate[2] = new DateTime(2021, 12, 3);
SelfStudySesiondate[3] = new DateTime(2021, 12, 4);
var combined = new List<(string Name, double Hours, DateTime Date)>();
for (int i = 0; i < SelfStudyModuleName.Count; i++)
combined[i] = ( Name: SelfStudyModuleName[i], Hours: SelfStudySesionHours[i], Date: SelfStudySesiondate[i] );
【讨论】:
【参考方案2】:试试这个
var result = new List<SelfStudy>();
for (var i = 0; i < SelfStudyModuleName.Count; i++)
result.Add(new SelfStudy
SelfStudyModuleName = SelfStudyModuleName[i],
SelfStudySesionHours = SelfStudySesionHours[i],
SelfStudySesiondate = SelfStudySesiondate[i]
);
类
public class SelfStudy
public DateTime SelfStudySesiondate get; set;
public string SelfStudyModuleName get; set;
public double SelfStudySesionHours get; set;
并为您的初始化添加 SelfStudySesiondate0
public string[] SelfStudySesiondate0 = new string[4];
SelfStudySesiondate0[0] = "2021 / 12 / 01";
SelfStudySesiondate0[1] = "2021 / 12 / 02";
SelfStudySesiondate0[2] = "2021 / 12 / 03";
SelfStudySesiondate0[3] = "2021 / 12 / 04";
SelfStudySesiondate=SelfStudySesiondate0.Select(i=> Convert.ToDateTime( i)).ToList();
【讨论】:
非常感谢这对您有很大帮助。 @DominiqueParkin 不客气!【参考方案3】:元组
for (var i = 0; i < SelfStudyModuleName.Count; i++)
result.Add(new SelfStudy
SelfStudyModuleName[i],SelfStudySesionHours[i],SelfStudySesiondate[i]
);
【讨论】:
【参考方案4】:LINQ Zip
运算符可能是您正在寻找的:
var results = SelfStudyModuleName.Zip(SelfStudySesionHours, (moduleName, sessionHours) => new moduleName, sessionHours )
.Zip(SelfStudySesiondate, (e, date) => new e.moduleName, e.sessionHours, date);
虽然如果您有能力对源进行索引(就像使用 List/Array 一样),您也可以这样做:
var results2 = SelfStudyModuleName
.Select((moduleName, i) => new
moduleName,
sessionHours = SelfStudySesionHours[i],
date = SelfStudySesiondate[i]
);
LINQPad Example
【讨论】:
非常感谢您的帮助,这也很有效,但其他答案在我的程序中效果更好。以上是关于将 3 个列表组合成 1 个 LINQ 查询 C#的主要内容,如果未能解决你的问题,请参考以下文章