我想知道我怎么能做到这一点(部分使用Linq,也许?递归方法?)。这完全让我感到困惑。
假设我有一个看起来像这样的时间跟踪对象列表:
Public Class TimeTracker
Public TimeTrackerID as integer
Public UserID As Integer
Public WorkstationID as Integer
Public WorkDateTime As DateTime
Public isEntry As Boolean
Public isExit As Boolean
End Class
按 WorkDateTime、UserID、WorkStationID 排序
我想最终得到一个包含如下对象的列表:
Public Class TimeTracker
Public TimeTrackerID as integer
Public UserID as integer
Public WorkstationID as integer
Public Date as Date
Public EntryTime as datetime
Public ExitTime as datetime
Public Duration as TimeSpan
End Class
基本上,WorkDateTime 告诉我们时间戳何时发生,isEntry/isExit 告诉我们员工是来还是去。
我需要遍历数据并确保进入/退出时间有效,即对于给定日期的每个工作站中的每个用户,进入时间先于退出时间,并且每个进入时间都有相应的退出时间。
如果时间确实有效,我需要将两个时间条目合并为一个具有进入/退出时间和两者之间的时间跨度的对象。
如果时间无效,例如只有一个进入时间,或者只有一个退出时间,或者退出时间在进入时间之前,那么对象应该保持原样,只需放入新对象的属性中即可。
任何帮助或方向表示赞赏。样本数据
- TimeTrackerID | UserID | WorkStationID | WorkDateTime | isEntry | isExit
- 1 | 1 | 66 | 1/1/2013 8:00 AM | True | False
- 2 | 1 | 66 | 1/1/2013 9:00 AM | False | True
- 3 | 2 | 77 | 1/1/2013 8:00 AM | True | False
- 4 | 2 | 77 | 2/1/2013 9:45 AM | False | True
...
应该变成
- TimeTrackerID | UserID | WorkStationID | Date | EntryTime | ExitTime | Duration
- 1 | 1 | 66 | 1/1/2013 | 8:00 AM | 9:00 AM | 1 hour
- 3 | 2 | 77 | 1/1/2013 | 8:00 AM | NULL | NULL
- 4 | 2 | 77 | 2/1/2013 | NULL | 9:45 AM | NULL
...
非常感谢任何帮助或指导。