实体框架:如何计算其他日期范围内的日期范围

时间:2016-05-17 21:21:39

标签: android sql entity-framework date

我正在使用实体框架来计算距日期范围与目标日期范围的天数。

假设我从日期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();
        }

select语句中的estimateUsageCount是我想要计算前一个和当前日志日期之间的天数的地方。 我正在考虑编写功能来完成这项工作,但不知道该怎么做。我知道计算很复杂。有没有人让我知道如何做到这一点。

1 个答案:

答案 0 :(得分: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