将foreach循环压缩为linq语句

本文关键字:linq 语句 压缩 foreach 循环 | 更新日期: 2023-09-27 18:28:50

所以我有三个列表:

// Members stores all non-sorted member objects
var Members = new List<Member>();
// Years stores all the expected graduation years I want to compare
var Years = new List<int>();
// Sorted will contain all of the members that have a matching year
var Sorted = new List<Member>();

我使用foreach循环对这些值进行排序

foreach (var m in Members)
{
    foreach (var y in Years)
    {
       if (m.ExpectedGraduationYear == y)
       {
           Sorted.Add(m);
       }
    }
}

有没有办法把它压缩成一个linq语句?

将foreach循环压缩为linq语句

您可以使用这样的LINQ查询:

Sorted = (from m in Members
         join y in Years
         on m.ExpectedGraduationYear equals y
         select m).ToList();
Members.Where(m => Years.Contains(m.ExpectedGraduationYear)).ToList()

类似这样的东西:

var Sorted = (from m in Members 
              from y in Years 
              where m.ExpectedGraduationYear == y select m).ToList();

是的,类似于以下内容:

Sorted = Members.Where(m => Years.Any(y => y == m.ExpectedGraduationYear)).ToList();
var Sorted = (from m in Members from y in Years.Where(y => m.ExpectedGraduationYear == y)
                              select m).ToList();