これは、ループではなくLinqで行うのが良い方法があれば、やってみることができます。これは私が今行っていることです。範囲内のLinqクエリ集計の日付
私の製品が2つの日付の間にアクティブである日数が必要です。
Productには多くのProductHistoriesがあり、ProductHistoryにはDateActiveとDateInactiveの値があります。この履歴が進行中であることを示すために、DateInactiveをnullにすることができます。歴史は重複しません。
startDateまたはProductHistoryのDateActiveの最大値を合計し、endDateまたはProductHistoryのDateInactiveの最小値(DateInactiveに値がない場合は、デフォルトでendDate)の合計からその合計を差し引きます。
は2011-01-01(1月1日)の間で活発な日のアクティブ数を取得し、2011年2月1日(2月1日)
履歴::
Active 2010-12-25 : Inactive 2011-01-05
Active 2011-01-15 : Inactive 2011-01-20
Active 2011-01-25 : Inactive null
は例を働いこれは16日、合計すべきである(4 + 5 + 7)
現時点では私の最高はかなり醜いです:
Dim a As Integer = (From h In histories
Select If(h.ActiveDate > startDate, h.ActiveDate, startDate)).Sum(Function(d) d.Ticks)/TimeSpan.TicksPerDay
Dim b As Integer = (From h In histories
Select If(h.InactiveDate.HasValue AndAlso h.InactiveDate < endDate, h.InactiveDate, endDate)).Sum(Function(d) d.Value.Ticks)/TimeSpan.TicksPerDay
Return b - a
どのような考えですか? (C#またはVBのいずれかが上手く、私は翻訳します)