2015-09-08 6 views
0

Я знаю, что что-то подобное было задано сто раз, но их ответы не работают для меня. Вот что у меня есть.DateTime в диапазоне дат

У меня есть объект (назовите его 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'

Список (ObjectB)
B1.StartTime = '7/1/2015 00:00:00'
B1.EndTime = '8/1/2015 00:00:00'

B2.StartTime = '07/1/2015 00:00:00'
B2.EndTime = '7/1/2016 23:59:59'

B3.StartTime = '8/1/2015 13:00:00'
B3.EndTime = '8/15/2015 23:59:59'

Теперь мой список ДОЛЖЕН включать B2 и B3, поскольку оба они перекрывают мои объекты ObjectA. Однако он не должен включать B1, поскольку время B1 заканчивается до начала другого запуска.

Мой текущий код выглядит следующим образом ...

myList = myList.Where(x => x.StartDate < ObjectA.StartDate && x.EndDate > ObjectA.EndDate).ToList(); 

Я получаю все 3 ObjectBs вернулся в списке. Я изменил это на сто разных способов, и я не понимаю, чего я ожидаю.

Это сводит меня с ума. Любая помощь будет оценена!

+1

http://stackoverflow.com/questions/13513932/algorithm-to-detect-overlapping-periods – ken2k

+1

«Я знаю, что что-то подобное было задано сто раз, но их ответы не работают для меня». - затем перечислите другие вопросы и их ответ, связавшись с ними и объясните, что не работает для вас, пожалуйста. В противном случае я предсказываю, что вы получите много предложений, чтобы посмотреть на некоторые другие вопросы (которые вы, возможно, уже читали!), Потому что мы не видим, как они не подходят в вашем случае. –

+0

Вам нужно только играть с EndDate объекта ObjectA, то есть для объекта foreach в списке ObjectB, его StartDate должен быть меньше, чем EndDate объекта ObjectA, а также EndDate объекта ObjectB> EndDate ObjecA. это заявление даст вам B2, B3. НЕ В1. myList = myList.Where (x => x.StartDate ObjectA.EndDate) .ToList(); –

ответ

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.

+0

Возможно, вы хотите удалить часть '=' как событие, которое заканчивается, когда запуск объекта «ObjectA», вероятно, не считается перекрытым. – juharr

+0

@juharr Правильно. –

+0

Приносим извинения, в объекте B1 появилась опечатка, которая, возможно, уточнила мой вопрос. Дата окончания должна быть '08/01/2015 00:00:00 '. Объект, который давал мне большую часть моей боли, был тем, который закончился в то же время, когда мой ObjectA начал, и он не должен был быть включен в мои вычисления. К сожалению, мое решение требует, чтобы мы были чувствительны к времени до минуты. Я решил найти решение в другой библиотеке [link] (http://www.codeproject.com/Articles/168662/Time-Period-Library-for-NET), и он работает как чемпион. – JamminJimE

Смежные вопросы