我正在寻找有关以下方法的任何建议或提示,即使用LINQ在Collection中找到null的某个属性,然后遍历结果(子列表)并从另一个属性执行方法相同的集合。
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;
}
我在第一种方法SetRaises()中不喜欢的部分是以下片段:
foreach (var record in noRaiseList )
{
CalculateRaise(record);
}
有没有办法直接将该部分集成到我的LINQ表达式中,即我不知道的一些扩展方法?
谢谢!
答案 0 :(得分:5)
您可以做的第一件事是:不生成中间列表:
var pending = employeeCollection.Where(emp => emp.Raise == null);
foreach (var record in pending)
{
CalculateRaise(record);
}
与:
相同 foreach (var record in employeeCollection.Where(emp => emp.Raise == null))
{
CalculateRaise(record);
}
现在这是非缓冲的延迟执行。
但坦率地说,LINQ在这里并没有给你太多帮助。你也可以:
foreach(var emp in employeeCollection)
{
if(emp.Raise == null) CalculateRaise(emp);
}
答案 1 :(得分:0)
如果您不需要Raise就不需要员工名单,您可以在一行中执行此操作:
employeeCollection.Where(emp => emp.Raise == null).ToList().ForEach(x => x.Raise = x.YearsOfService * 100);
答案 2 :(得分:0)
您可以使用ForEach链方法。但这只是糖的语法。
employeeCollection.Where(emp => emp.Raise == null)
.ToList()
.ForEach(record => CalculateRaise(record))
答案 3 :(得分:0)
它应该是这样的:
var noRaiseList = employeeCollection .Where(emp => emp.Raise == null).ToList().ForEach(e=>e.Raise = e.YearsOfService * 100);