2016-11-01 4 views
2

Ich habe Datentabelle mit einigen Spalten wie folgt aus:Summe einer Spalte mit Bedingung mit Linq

zB:

WorkHour  Salary Name 
    60   100  A 
    70   120  B 
    65   105  C 

Summe Workhour:

Summe Gehalt:

Ich möchte die Summe der Spalten "WorkHour" und "Gehalt" aber mit der Bedingung: Wenn Name == A WorkHour addieren, aber nicht hinzufügen, ist Gehalt.

Hier ist mein Code:

var resultSum = from row in dt.AsEnumerable() 
       group row by row.Field<string>("UserId") into grp 
       select new 
       { 
        Salary = grp.Sum(r => r.Field<decimal>("Salary")), 
        WorkHour = grp.Sum(r => r.Field<decimal>("WorkHour")) 
       }; 

foreach (var rn in resultSum) 
{ 
    decimal dSalary = rn.Salary; 
    decimal WorkHour = rn.WorkHour; 
} 
+0

LINQ 2 SQL, LINQ 2 Objekte, Entity Framework? –

Antwort

2

die Aufzeichnungen Gruppe und dann bei der Berechnung der Salary ein Where vor dem Sum hinzufügen:

var result = (from item in dt.AsEnumerable() 
       group item by item.Field<string>("UserId") into g 
       select 
       { 
        Salary = g.Where(i => i.Field<string>("Name") != "A") 
          .Sum(i => i.Field<decimal>("Salary")), 
        WorkHour = g.Sum(i => i.Field<decimal>("WorkHour")) 
       }).ToList(); 
+0

Danke @Gilad Grün. Es hat funktioniert. – shiva1367

+0

@ shiva1367 - Sie sind willkommen :) –