2016-05-17 140 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