2016-05-17 190 views
0

我正在使用實體框架來計算日期範圍與目標日期範圍之間的天數。實體框架:如何計算其他日期範圍內的日期範圍

讓我說我從一個從日期A到日期B.在日期的每一行中,我有上一個日誌日期和當前日誌日期。我想知道在前一個日誌日期和當前日誌日期之間有多少天。

我的代碼我目前正在寫的是:

var days = toDate.Subtract(fromDate).TotalDays; 
      var usageLog = (from usageLogs in context.UsageLogs 
          where 
           (usageLogs.PreviousLogDate != null 
            && (DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= fromDate.Date && DbFunctions.TruncateTime(usageLogs.PreviousLogDate) <= toDate.Date)) || 

           (usageLogs.PreviousLogDate == null 
            && ((DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= toDate.Date) && (DbFunctions.TruncateTime(usageLogs.CurrentServerLogDate) >= fromDate.Date))) 

          select new 
          { 
           PackageName = usageLogs.PackageName, 
           estimateUsageCount = (double)usageLogs.UsageCount 
          }); 

      var statistics = (from usage in usageLog 
           group usage 
           by new 
           { 
            usage.PackageName 
           } 
          into grp 

           select new 
           { 
            PackageName = grp.Key.PackageName, 
            UsageCount = grp.Sum(c => c.estimateUsageCount) 
           }); 

      return statistics.ToList(); 
     } 

estimateUsageCount在SELECT語句,我想計算天以前和當前日誌日期之間坐着的數量。 我想寫功能來完成這項工作,但不知道該怎麼做。我知道這個計算很複雜。有沒有人給我一個如何去做的想法。

回答

0

你可以這樣說:

select new 
{ 
    PackageName = usageLogs.PackageName, 
    estimateUsageCount = (usageLogs.CurrentServerLogs - usageLogs.PreviousServerLogs).Days 
}); 

對於兩個日期之間的範圍內,我發現這個Excel公式:

=MAX(0,NETWORKDAYS(MAX(Date1, Date2),MIN(dateA,dateA))) 

,它可以被翻譯成C#這樣,使用三元運營商:

0 > ((date1 > date2 ? date1 : date2) - (dateA < dateB ? dateA : dateB)).Days ? 0 : ((date1 > date2 ? date1 : date2) - (dateA < dateB ? dateA : dateB)).Days 
+0

謝謝,但這會得到不同的日子,但我真正想要的是有兩組日期範圍,並看到h多天這兩組日期範圍相撞。例如。日期1到日期2和日期到日期B,並查看它們在一起會面的天數 – LittleFunny

+0

對不起,我弄錯了。我剛剛編輯我的第一個響應,以包括兩個日期之間的範圍也。請讓我知道這對你有沒有用。 – Patricia

+0

感謝您的回覆,我還沒有機會檢查。我稍後再嘗試並告訴您結果。 – LittleFunny