Context
Итак, у меня есть пользователь, который будет активен между двумя датами:
User.StartDate
User.EndDate
В течение этого времени будут задачи, над которыми пользователь может работать.
Task.StartDate
Task.EndDate
Примечание: Конечные даты в каждой из них обнуляются.
Если EndDate не определен для пользователя, пользователь всегда будет активным и никогда не уйдет.
И если у Задания нет даты окончания, Задание никогда не закончится и всегда будет доступно для пользователей, которые запускаются после выполнения задания.
Попытка найти изящный способ в C # для получения отфильтрованных List<Task>
задач, в которых пользователь активен, и диапазон дат задачи попадает в этот активный период.
Мое решение
Пока это то, что я придумал, кто-нибудь посоветует лучше?
/// <summary>
/// Filter a list of Task so only tasks falling between dates will be returned.
/// If toDateTime is not defined, then it's considered open ended
/// </summary>
/// <param name="tasks"></param>
/// <param name="fromDateTime"></param>
/// <param name="toDateTime"></param>
/// <returns>A filtered list of tasks</returns>
public List<Task> FilterRatesOnDates(
List<Task> tasks,
DateTime fromDateTime,
DateTime? toDateTime)
{
tasks = tasks.FindAll(p =>
((p.ToDate.HasValue && fromDateTime <= p.ToDate)
|| !p.ToDate.HasValue)
&&
((toDateTime.HasValue && toDateTime >= p.FromDate)
|| !toDateTime.HasValue)
);
return tasks;
}