我一直试图找出一种选择机器特定时期事件的实用方法。我有一个关于机器的产品到达/ process_start / process_finish次数(DateTime)的历史数据以及具有event_start / event_type / event_finish times(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)
这并没有给我正确的状态,当机器可能出现问题时我会勾勒出选项时会让人感到困惑和暧昧......是不是我也应该使用流程启动或者我正在寻找更多&amp;&amp; amp;语句?
非常感谢快速反馈:) 谢谢!
答案 0 :(得分:1)
您似乎在询问检测重叠范围,即 - 确定两个范围内的任何时间是否相交。对此的测试在我提供的重复帖子中。使用您的变量名称,如下所示:
event.Start <= product.Finish && event.Finish >= product.Arrival
假定完全包容范围。更常见的是,我们使用在开始时包含的范围和在结尾时独占的范围。这也称为“半开区间”,由[start,end)
表示。这可以防止任何时刻处于两个不同的范围内。我强烈建议你使用这些。如果这样做,测试会稍微改变一下:
event.Start < product.Finish && event.Finish >= product.Arrival
这种变化很微妙,但这意味着它不会包含在产品完成时间完全的事件。