如何优化这个LINQ表达式w/Where条件并调用Method?

use*_*190 2 c# linq lambda

我正在寻找有关以下方法的任何建议或提示,即使用LINQ在Collection中找到null的某个属性,然后遍历结果(子列表)并从同一个Collection中的另一个属性上执行方法.

private void SetRaises()
{
    if (employeeCollection != null)
    {
      var noRaiseList = employeeCollection .Where(emp => emp.Raise == null).ToList();
      foreach (var record in noRaiseList )
      {
         CalculateRaise(record);
      }
    }
}

public void CalculateRaise(Employee emp)
{
    if (emp!= null)
        emp.Raise = emp.YearsOfService * 100;
}
Run Code Online (Sandbox Code Playgroud)

我在第一种方法SetRaises()中不喜欢的部分是以下代码段:

foreach (var record in noRaiseList )
{
    CalculateRaise(record);
}
Run Code Online (Sandbox Code Playgroud)

有没有办法直接将该部分集成到我的LINQ表达式中,即我不知道的一些扩展方法?

谢谢!

Mar*_*ell 5

你可以做的第一件事是:不要生成中间列表:

 var pending = employeeCollection.Where(emp => emp.Raise == null);
 foreach (var record in pending)
 {
     CalculateRaise(record);
 }
Run Code Online (Sandbox Code Playgroud)

这与:

 foreach (var record in employeeCollection.Where(emp => emp.Raise == null))
 {
     CalculateRaise(record);
 }
Run Code Online (Sandbox Code Playgroud)

现在这是非缓冲的延迟执行.

但坦率地说,LINQ在这里并没有给你太多帮助.你也可以:

foreach(var emp in employeeCollection)
{
    if(emp.Raise == null) CalculateRaise(emp);
}
Run Code Online (Sandbox Code Playgroud)

  • @guarav当然 - 我只是想保持一致.但是,我不确定为什么每个人总是痴迷于"在一条线上做所有事情".这不是代码中的目标. (5认同)