C# 使用Linq匹配两个不同列表中的值

C# 使用Linq匹配两个不同列表中的值,c#,linq,list,C#,Linq,List,道歉如果以前有人问过,我找不到问题的答案 我有两个清单,比如说: List<Job> jobs; List<Period> periods; 列出作业; 列出期间; 类Job和Period包含一个标识符JobID,用于将它们链接在一起。在这两个列表中,这些对象之间的关系为1:1,即每个作业有一个周期 使用Linq将每个作业与其对应的周期配对的最有效方法是什么?我目前正在这样做: Period matchingPeriod; for (int i = 0; i <

道歉如果以前有人问过,我找不到问题的答案

我有两个清单,比如说:

List<Job> jobs;
List<Period> periods;
列出作业;
列出期间;
类Job和Period包含一个标识符JobID,用于将它们链接在一起。在这两个列表中,这些对象之间的关系为1:1,即每个作业有一个周期

使用Linq将每个作业与其对应的周期配对的最有效方法是什么?我目前正在这样做:

Period matchingPeriod;
for (int i = 0; i < jobs.Count; i++)
{
    matchingPeriod = periods.Single(j => j.JobID== jobs[i].JobID);
    //other code 
}
周期匹配周期;
for(int i=0;ij.JobID==jobs[i].JobID);
//其他代码
}
但在大型数据集中,这需要时间。 非常感谢

var result = jobs.Join(
    periods,
    job => job.JobID,
    period => period.JobID,
    (job, period) => new { Job = job, Period = period }
);


我想你可以使用Linq.Join我想你可以使用Linq.Join当涉及到
Join
时,我更喜欢查询语法。由于LINQ的延迟执行,您还可以在多个查询中分离它(
Join
in query,rest in method syntax),而不会对性能造成任何影响。@TimSchmelter,这里也一样。我只是想让OP看看他有什么选择。当涉及到
Join
时,我更喜欢查询语法。由于LINQ的延迟执行,您还可以在多个查询中分离它(
Join
in query,rest in method syntax),而不会对性能造成任何影响。@TimSchmelter,这里也一样。我只是想让OP看看他有什么选择。OP声称工作和周期之间总是1:1的关系。他需要把它们联系起来。OP声称工作和周期之间总是有1:1的关系。他需要把它们写进信件。
var result = 
    from j in Jobs
    join p in Periods on j.JobID equals p.JobID
    select new { Job = j, Period = p };
var periods = (from j in jobs
               join p in periods on j.Id  equals p.JobID
               select p).ToList();