2017-10-11 36 views
0

我正在尋找一種更優雅的方式來總結2列,使用LINQ進行月份到日期。我有以下查詢哪些工作正常,但它看起來效率低下。使用LINQ求和列

什麼是更好的重寫方式?

謝謝

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

回答

3

這會不會有同樣的效果呢?

​​
+3

或者只是TotalLaborHours = db.Timesheet .SUM(A =>一個。 Date <= MDate && a.Date.Month == MDate.Month?a.RegularPaidHours + a.OvertimeHours:0); –

+0

這正是我所期待的。謝謝! – iCosmin

+1

個人偏好,但我認爲現在的答案比刪除where子句和使用三元操作強制所有對「Sum」的調用更具可讀性。 –

0

你可以使用匿名類型,是兩列的總和,再總結,像這樣的總和:

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

由於它目前寫入,不編譯。你需要將'Sum'方法改爲這個'Sum(c => c.hrs)'來編譯。 –

+2

鑑於amburt05的回答,創建一個帶有單個字段的匿名類型似乎有點愚蠢,只是在完成總和時必須選擇單個字段。 –