2016-07-21 10 views
0

Ich habe 2 Sammlungen. Ein Wörterbuch Gehalt pro jobgrade (Dictionary<string, double>) und eine Liste von Objekten enthält, welche Regeln enthalten (List<jobgradeRule>)LINQ einen Wert aus 2 Wörterbüchern berechnen

ich durch die beiden Listen zu durchlaufen wollen und berechnen können einen Wert auf der Grundlage der Regel

Die Regel ein * als Job-Grade, was bedeutet, dass alle Jobgrade im Gehaltswörterbuch betroffen sein sollten.

Ich habe diese

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

Kann dies in einer LINQ-Anweisung geschehen?

Antwort

1

So etwas wie dies funktionieren soll:

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

Und es spart Sie das Wörterbuch mit ToList Anruf Neuzuweisung wie vorgeschlagen von @ TJF.

+0

Ich mag diese Antwort. Wäre dies ein Leistungsvorteil gegenüber der Antwort von Machine Learning? – Jaques

+0

Sie sollten ziemlich gleich sein. – MarcinJuraszek

0

Ich habe nicht den Code ausführen, aber dies sollte man nahe kommen:

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

Versucht es, es funktioniert. Die tatsächliche Anweisung sollte folgendermaßen aussehen: 'gehälterPerJobGrade.ForEach (item => attrAmount + = attr.Where (ritem => (item.JOB_GRADE_CD == ritem.JOB_GRADE_CD || ritem.JOB_GRADE_CD ==" * ")). Summe (ritem => item.Value * ritem.RULE_VALUE)); ' – GregaMohorko

Verwandte Themen