我正在寻找使用linq的日期冲突的行。我有5列

ID   ref_id   ref_Name   Borrow_Date  Return_Date
1    1343     Gate       13/09/2011   20/09/2011
2    1352     Door       20/09/2011   22/09/2011
3    1343     Gate       17/09/2011   21/09/2011


在这种情况下,我的“门”发生冲突,因为有人要借用它,而别人也想借用它。

无论如何,是否可以使用linq轻松识别日期范围冲突?

最佳答案

一种方法是这样的。不过,它可能是性能更高的变体:

var collisions = myList.Where( d1 => !myList.Where( d => d != d1).All( d2 =>  d1.Return_Date <= d2.Borrow_Date|| d1.Borrow_Date >= d2.Return_Date));


这将返回与至少另一行重叠的所有行。在上述情况下,由于ID 3的行与1和2重叠,因此它将返回所有这三个值。如果将1更改为Return_Date 17/09/2011,则它将仅返回2和3。

关于c# - 使用linq识别日期冲突,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8008377/

10-13 08:13