如何将相应的时间条目及其持续时间组合到新对象中?

时间:2013-06-23 18:23:42

标签: vb.net linq

我想知道如何实现这一点(部分使用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
...

任何帮助或方向都非常受欢迎。

1 个答案:

答案 0 :(得分:0)

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