我知道这样的事情被问了一百次,但他们的答案对我来说并不适合。这就是我所拥有的。
我有一个对象(称之为ObjectA),其中包含一个开始DateTime
和一个结束DateTime
。我有另一个对象集合(List(ObjectB)
)(不同于ObjectA),它们具有带开始和结束的DateTime范围。我正在寻找List(ObjectB)
的所有对象,其日期范围与ObjectA的范围重叠。让我们看看我能做些什么......
ObjectA.StartTime =' 7/31/2015 00:00:00'
ObjectA.EndTime =' 8/2/2015 00:00:00'
列表(对象B)
B1.StartTime =' 7/1/2015 00:00:00'
B1.EndTime =' 8/1/2015 00:00:00'
B2.StartTime =' 7/1/2015 00:00:00'
B2.EndTime =' 7/1/2016 23:59:59'
B3.StartTime =' 2015年8月1日13:00:00'
B3.EndTime =' 2015年8月15日23:59:59'
现在,我的列表应该包括B2和B3,因为它们都与ObjectA重叠。但是,它不应该包括B1,因为B1的时间在另一个时间开始之前结束。
我目前的代码如下......
myList = myList.Where(x => x.StartDate < ObjectA.StartDate && x.EndDate > ObjectA.EndDate).ToList();
我在列表中返回了所有3个ObjectB。我已经改变了一百种不同的方式,但我没有得到我期望的结果。
这让我疯了。任何帮助将不胜感激!
答案 0 :(得分:2)
myList = myList.Where(x => x.StartDate < ObjectA.EndDate && x.EndDate > ObjectA.StartDate).ToList();
在ObjectA
之前开始但在开始之前尚未结束的所有对象。
您最初编写的代码只会捕获具有完全包含ObjectA
持续时间的开始日期和结束日期的对象。
我很困惑为什么你不希望代码返回B1
。它从07-01开始,到08-01结束,而ObjectA从07-31开始,到08-02结束,这意味着它们的日期范围将从07-31重叠到08-01。 / p>