2016-07-21 5 views
0

私は2つのコレクションを持っています。私はルールを両方のリストを反復処理し、ルールに基づいてLINQは2つの辞書から値を計算します

を値を計算したいjobgradeあたりの給与を含む辞書(Dictionary<string, double>)とルール(List<jobgradeRule>)を含有するものをオブジェクトのリスト

*を持つことができます仕事の等級として、給与辞書のすべての職務に影響を与える必要があることを意味します。

私はこれは、LINQ文でこの

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

を行うことができますか?

答えて

1

何かが動作するはずです:

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

をそして、それは提案のように、あなたがToList呼び出しで辞書を再割り当て節約します@TJFによって。

+0

私はこの答えが好きです。これはMachine Learningの答えよりもパフォーマンス上の利点がありますか? – Jaques

+0

彼らはかなり同等でなければなりません。 – MarcinJuraszek

0

私は、コードを実行していないが、これは近いあなたを取得する必要があります。このような

salariesPerJobGrade.ToList().ForEach(x => attrAmount += attr.Where(y => *check your rule here*).Sum(y => x.Value * y.RULE_VALUE)); 
+0

試してみると、うまくいきます。実際のステートメントは次のようになります: 'salariesPerJobGrade.ForEach(item => attrAmount + = attr.Where(item.JOB_GRADE_CD == ritem.JOB_GRADE_CD || ritem.JOB_GRADE_CD ==" * "))。Sum(ritem = => item.Value * ritem.RULE_VALUE))); – GregaMohorko

関連する問題