我正在使用实体框架来计算距日期范围与目标日期范围的天数。
假设我从日期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是我想要计算前一个和当前日志日期之间的天数的地方。 我正在考虑编写功能来完成这项工作,但不知道该怎么做。我知道计算很复杂。有没有人让我知道如何做到这一点。
答案 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