0

我一直在试图找出一种实用的方法来选择机器特定时期的事件。我有机器的产品到达/process_start/process_finish 时间 (DateTime) 的历史数据,以及带有 event_start/event_type/event_finish 时间 (DateTime) 的机器事件(故障、维修、维护等)。

我想确定从产品到达到完成流程的机器上发生的那些事件。

     foreach(var product in productList)
     var resultEvents = from events in eventList 
                        where (data.Machine == product.Machine) && (events.Start<product.Arrival && event.Finish < product.Finish)

这并没有给我正确的状态,当我概述机器可能出现故障时的选项时,它会变得混乱和模棱两可......是我也应该使用 process start 还是我正在查看更多 && 语句?

非常感谢您的快速反馈:) 谢谢!

4

1 回答 1

1

您似乎在询问是否检测重叠范围,即确定两个范围内的任何时间是否相交。对此的测试在我提供的重复帖子中。使用您的变量名称,如下所示:

event.Start <= product.Finish && event.Finish >= product.Arrival

这假设完全包含范围。更常见的是,我们使用开头包含且结尾不包含的范围。这也称为“半开区间”,用 表示[start,end)。这可以防止任何时刻处于两个不同的范围内。我强烈建议你使用这些。如果你这样做,测试会稍微改变为:

event.Start < product.Finish && event.Finish >= product.Arrival

这种变化是微妙的,但这意味着它不会包括恰好在产品完成时间开始的事件。

于 2013-09-04T14:31:35.190 回答