Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime之间的时间跨度仅在营业时间上午8:30-下午5:00 M-F_C#_Linq - Fatal编程技术网

C# DateTime之间的时间跨度仅在营业时间上午8:30-下午5:00 M-F

C# DateTime之间的时间跨度仅在营业时间上午8:30-下午5:00 M-F,c#,linq,C#,Linq,我试图获得从工作登录到票务系统到工作到期之间的总时间(以小时为单位)。例如,如果作业在星期五下午4:00记录,并在星期一上午10:30到期,则其时间跨度为3小时。(不包括周末和我们的营业时间) 我可以获取总时间的TimeSpan,但我不知道如何仅在工作时间获取TimeSpan 我使用LINQpad作为代码草稿行,并查询数据库 下面是我的一个查询示例,它获取的是总的TimeSpan,而不是工作时间的TimeSpan (from so in TblServiceOrders where so.D

我试图获得从工作登录到票务系统到工作到期之间的总时间(以小时为单位)。例如,如果作业在星期五下午4:00记录,并在星期一上午10:30到期,则其时间跨度为3小时。(不包括周末和我们的营业时间)

我可以获取总时间的
TimeSpan
,但我不知道如何仅在工作时间获取
TimeSpan

我使用
LINQpad
作为代码草稿行,并查询数据库

下面是我的一个查询示例,它获取的是总的
TimeSpan
,而不是工作时间的
TimeSpan

(from so in TblServiceOrders 
 where so.DateReceived != null
    && so.TimeReceived != null
    && so.DateRequested != null
    && so.TimeRequested != null
 orderby so.SONumber descending
 select new
 {
   so.SONumber,
   received = so.DateReceived.Value.AddTicks(so.TimeReceived.Value.Ticks),
   requested = so.DateRequested.Value.AddTicks(so.TimeRequested.Value.Ticks),
   TimeSpan = (so.DateReceived.Value.AddTicks(so.TimeReceived.Value.Ticks))
              .Subtract(so.DateRequested.Value.AddTicks(so.TimeRequested.Value.Ticks))
 }).Take(20)

我希望有更好的方法来做到这一点,但是因为我的
时间范围从来都不超过几天,我已经能够在
Linq
查询中使用以下代码实现这一切:

这只适用于
linqtosql
,这很不幸,因为它不能在
实体框架中使用

from so in TblServiceOrders

where so.DateReceived != null &&
      so.TimeReceived != null &&
      so.DateRequested != null &&
      so.TimeRequested != null

//Get the named day of the week for start of TimeRange
let DayReceived = so.DateReceived.Value.DayOfWeek
let DayRequested = so.DateRequested.Value.DayOfWeek

//Find out how many days pass within the TimeRange
let SLADaysLapesed = ((so.DateRequested.Value.Day) - (so.DateReceived.Value.Day))

//Find out if any of those days past fall onto a Sat and therefor over a weekend.
//This will only work for the first weekend within the TimeRange.
let SLAContainsWE = (DayReceived == DayOfWeek.Monday && SLADaysLapesed <= 4 ||
                     DayReceived == DayOfWeek.Tuesday && SLADaysLapesed <= 3 ||
                     DayReceived == DayOfWeek.Wednesday && SLADaysLapesed <= 2 ||
                     DayReceived == DayOfWeek.Thursday && SLADaysLapesed <= 1 ||
                     DayReceived == DayOfWeek.Friday && SLADaysLapesed <= 0 ? false : true )

//Work out how many hours pass outside of business hours. (930 minutes)                  
let SLATotalDailyAH = (new TimeSpan(0, (930 * SLADaysLapesed), 0))

//Work out if the TimeRange falls over a weekend. Time declared in mins is equal to two standard working days 8.5hr x 2 in my case.                
let TotalWEHours = (SLAContainsWE == true ? new TimeSpan(0,1020,0) : new TimeSpan(0,0,0))

//Work out how many Business hours have passed by removing the total after hours.
let SLAHours =  (
                ((so.DateRequested.Value.AddHours(so.TimeRequested.Value.Hour)).AddMinutes(so.TimeRequested.Value.Minute)).Subtract
                ((so.DateReceived.Value.AddHours(so.TimeReceived.Value.Hour)).AddMinutes(so.TimeReceived.Value.Minute)).Subtract
                (SLATotalDailyAH).Subtract(TotalWEHours)
                )   

select SLAHours
TblServiceOrders中so的

在哪里收到了这样的邮件!=空的&&
所以,我收到了空的&&
所以,我请求了!=空的&&
所以,请求时间!=无效的
//获取一周中指定的开始时间范围的日期
让DayReceived=so.DateReceived.Value.DayOfWeek
让DayRequested=so.DateRequested.Value.DayOfWeek
//了解时间范围内经过了多少天
让sladayslappesed=((so.DateRequested.Value.Day)-(so.DateReceived.Value.Day))
//找出过去的那些日子中是否有一天被列入Sat考试,并因此在周末被列入Sat考试。
//这只适用于时间范围内的第一个周末。

让我们=(DayReceived==DayOfWeek.Monday&&SladaySlapped为什么不计算一周的剩余时间并加上下一周的剩余时间?或者计算总时间并减去休息时间?嗨,杰夫,有些工作的优先级为3天,而有些工作的优先级为3小时。有些工作会在夜间终止,有些工作会在周末终止,而另一些工作会在周末终止在同一天内。我正在寻找一种合乎逻辑的方法来建立解释所有这些的条件,我只是在画空白(