0

我想知道我怎么能做到这一点(部分使用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
...

非常感谢任何帮助或指导。

4

1 回答 1

0

感谢 tinstaafl - 我最终做的是按三个分组标准(用户 ID、工作站 ID 和日期)对我的对象进行分组,然后对每个组执行我的验证方法(查看组内的时间是否匹配)。我创建了一个继承自旧 TimeTracker 类并添加了属性的类。我将这些对象用于包含有效时间的组。

于 2013-06-27T08:14:05.033 回答