LINQ从两个字典中计算一个值

本文关键字:计算 一个 两个 LINQ 字典 | 更新日期: 2023-09-27 17:58:01

我有两个集合。一个字典,包含每个工作级别的工资(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语句中完成吗?

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));