2017-10-11 19 views
0

LINQを使用して月間2列を合計するより洗練された方法を探しています。私はちょうどうまく動作するが、それは非効率的に見える次のクエリがあります。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 => A。日付<= MDate && a.Date.Month == MDate.Month?a.RegularPaidHours + a.OvertimeHours:0); –

+0

これはまさに私が探していたものです。ありがとうございました! – iCosmin

+1

個人的な好みですが、私は、 'where'節を削除し、すべてを三項演算を使って' Sum'への呼び出しに強制するよりもはるかに読みやすいと思います。 –

0

あなたがそうのような合計を合計し、その後、2列の和である匿名型を使用することができます。

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の答えが与えられた場合、1つのフィールドで匿名型を作成するのはちょっとばかげているようです。 –

関連する問題