2017-10-11 4 views
0

Je cherche une façon plus élégante de sommer 2 colonnes, mois à jour en utilisant LINQ. J'ai la requête suivante qui fonctionne très bien, mais il semble inefficace.Additionner des colonnes en utilisant LINQ

Quelle est la meilleure façon de le réécrire?

Merci

TotalLaborHours = db.Timesheet.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month) 
           .Select(a => a.RegularPaidHours).Sum() + 
        db.Timesheet.Where(a => a.Date <= MDate & a.Date.Month == MDate.Month) 
           .Select(a => a.OvertimeHours).Sum(); 

Répondre

3

serait-ce pas le même effet?

TotalLaborHours = db.Timesheet 
    .Where(a => a.Date <= MDate & a.Date.Month == MDate.Month) 
    .Select(a => a.RegularPaidHours + a.OvertimeHours).Sum(); 
+3

Ou TotalLaborHours = db.Timesheet .sum (a => a. Date <= MDate && a.Date.Month == MDate.Month? A.RegularPaidHours + a.OvertimeHours: 0); –

+0

C'est exactement ce que je cherchais. Je vous remercie! – iCosmin

+1

Préférence personnelle, mais je pense que la réponse telle quelle est beaucoup plus lisible que de supprimer la clause 'where' et de tout forcer dans l'appel de' Sum' avec une opération ternaire. –

0

Vous pouvez utiliser un type anonyme qui est la somme des deux colonnes, la somme la somme comme ceci:

TotalLaborHours = db.Timesheet 
    .Where(a => a.Date <= MDate & a.Date.Month == MDate.Month) 
    .Select(a => new { hrs = a.RegularPaidHours + a.OvertimeHours }).Sum(b => b.hrs); 
+3

Comme c'est actuellement écrit, ne compile pas. Vous devez changer votre méthode 'Sum' à cette' Sum (c => c.hrs) 'pour faire cette compilation. –

+2

Étant donné la réponse d'amburt05, il semble un peu idiot de créer un type anonyme avec un seul champ, juste pour avoir à sélectionner ce seul champ lors de la somme. –