2 votes

somme d'une colonne avec condition en utilisant linq

J'ai un tableau de données avec quelques colonnes comme ceci :

Par exemple :

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

Somme de WorkHour : 195

Somme du salaire : 225

Je veux la somme des colonnes "WorkHour" et "Salary" mais avec une condition : Si Name==A, ajouter WorkHour à la somme mais pas son salaire.

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

2voto

Gilad Green Points 29387

Regrouper les enregistrements et ensuite, lors du calcul de la Salary ajouter un Where avant le Sum :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X