1 年全体の時間を月ごとに合計しようとしています。ただし、週の途中で終了して開始する月の問題に遭遇しました。これが私の解決策ですが、この特定の週の日付で機能するようにlinqをハードコーディングする必要がありました。この例では、
WeekStart is Febuary 26 2012 - SUNDAY
WeekEnd is March 1 2012 - THURSDAY
通常の週の場合のハードコードされた例では、これが使用されます(sumvalを参照)
.ToUpper()).Sum(y => y.TOTALHOURS).Value;
翌月の分割週の場合に使用します (sumval1 を参照)
.ToUpper()).Sum(y => y.THURSDAY + y.FRIDAY + y.SATURDAY).Value;
前月の分割週の場合(sumval2参照)
.ToUpper()).Sum(y => y.SUNDAY + y.MONDAY + y.TUESDAY + y.WEDNESDAY).Value;
これらに基づいて、時間は 2 か月に分割された週の適切な月に課金されます。
問題は、これらの曜日をハードコーディングしたくないということです。sumval1 と sumval2 に追加する必要がある曜日を動的に入力するにはどうすればよいですか
double sumval = data.Where(x =>
//ExportHelper.isSplitWeek(x.WKENDDATE, x.WKENDDATE.AddDays(6)) != true &&
x.PORTFOLIO.ToUpper() == item.portfolio.ToUpper() &&
x.PHASE.ToUpper() == portitem.phase.ToUpper() &&
x.PHASEDESCRIPTION.ToUpper() == portitem.phasedesc.ToUpper() &&
x.WKENDDATE.ToString("MMM yyyy").ToUpper() == monitem.monthname.ToString()
.ToUpper()).Sum(y => y.TOTALHOURS).Value;
double sumval1 =
data.Where(x =>
ExportHelper.isSplitWeek(x.WKENDDATE, x.WKENDDATE.AddDays(6)) == true &&
x.PORTFOLIO.ToUpper() == item.portfolio.ToUpper() &&
x.PHASE.ToUpper() == portitem.phase.ToUpper() &&
x.PHASEDESCRIPTION.ToUpper() == portitem.phasedesc.ToUpper() &&
ExportHelper.getSplitEndDate(x.WKENDDATE).AddDays(1).ToString("MMM yyyy").ToUpper() == monitem.monthname.ToString()
.ToUpper()).Sum(y => y.THURSDAY + y.FRIDAY + y.SATURDAY).Value;
double sumval2 =
data.Where(x =>
ExportHelper.isSplitWeek(x.WKENDDATE, x.WKENDDATE.AddDays(6)) == true &&
x.PORTFOLIO.ToUpper() == item.portfolio.ToUpper() &&
x.PHASE.ToUpper() == portitem.phase.ToUpper() &&
x.PHASEDESCRIPTION.ToUpper() == portitem.phasedesc.ToUpper() &&
x.WKENDDATE.ToString("MMM yyyy").ToUpper() == monitem.monthname.ToString()
.ToUpper()).Sum(y => y.SUNDAY + y.MONDAY + y.TUESDAY + y.WEDNESDAY).Value;