2016-07-21 2 views
0

2 개의 모음집이 있습니다. jobgrade 당 급여를 포함하는 사전 (Dictionary<string, double>) 및 규칙 (List<jobgradeRule>)LINQ 사전 2 개로 값 계산

나는 규칙에 따라 값을 두 목록을 통해 반복하고 계산할 포함 된 어떤 개체의 목록은

규칙은 *을 가질 수 있습니다 급여 사전에있는 모든 직급이 영향을 받는다는 것을 의미하는 직급.

나는이

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 문에서 할 수 있나요?

답변

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 (ritem => (item.JOB_GRADE_CD == ritem.JOB_GRADE_CD || ritem.JOB_GRADE_CD == "*")). => item.Value * ritem.RULE_VALUE)); ' – GregaMohorko