我有两个集合。一个字典,包含每个工作级别的工资(Dictionary<string, double>
)和包含规则的对象列表(List<jobgradeRule>
)
我想遍历这两个列表,并根据规则计算一个值
该规则可以将*
作为职务等级,这意味着薪资字典中的所有职务等级都应该受到影响。
我有这个
foreach (var item in salariesPerJobGrade)
foreach (var ritem in attr)
{
if (item.JOB_GRADE_CD == ritem.JOB_GRADE_CD || ritem.JOB_GRADE_CD == "*")
attrAmount += item.Value * ritem.RULE_VALUE;
}
这可以在LINQ语句中完成吗?
这样的东西应该可以工作:
attrAmount += (from item in salariesPerJobGrade
from ritem in attr
where item.JOB_GRADE_CD == ritem.JOB_GRADE_CD || ritem.JOB_GRADE_CD == "*"
select item.Value * ritem.RULE_VALUE).Sum();
它还可以像@TJF建议的那样,使用ToList
调用来节省重新分配字典的时间。
我还没有运行代码,但这应该会让你接近:
salariesPerJobGrade.ToList().ForEach(x => attrAmount += attr.Where(y => *check your rule here*).Sum(y => x.Value * y.RULE_VALUE));