Reputation: 473
I have an array of terms which have start-dates and end-dates. how can I find whether today falls between the terms. code is
var termsforcurrentCalendar = UnitOfWork.SchoolTerms.Query().Where(x
=> x.SchoolCalendarId == currentCalendar.SchoolCalendarId).ToArray();
var noOfTerms = termsforcurrentCalendar.Count();
for (int i = 0; i < noOfTerms; i++)
{
if (DateTime.Today > termsforcurrentCalendar[i].EndDate)
{
if (i != noOfTerms)
{
if (DateTime.Today < termsforcurrentCalendar[i + 1].StartDate)
{
datetoBeChecked = termsforcurrentCalendar[i + 1].StartDate;
}
}
}
}
Upvotes: 0
Views: 111
Reputation: 28157
How about using a bit of linq niceness:
var isTodayInTerm = termsforcurrentCalendar.Any(a =>
DateTime.Today >= a.StartDate && DateTime.Today <= a.EndDate);
As per comment, to get the next term:
var nextTerm = termsforcurrentCalendar.OrderBy(a => a.StartDate).FirstOrDefault(a =>
a.StartDate >= DateTime.Today);
Upvotes: 1
Reputation: 2258
var isTodayInTerm = termsforcurrentCalendar.Any(a =>DateTime.Today >= a.StartDate && DateTime.Today <= a.EndDate);
if (!isTodayInTerm)
{
var firstAvailableDate = termsforcurrentCalendar.OrderBy(a=>a.StartDate).FirstOrDefault(z => z.StartDate > DateTime.Today);
datetoBeChecked = firstAvailableDate.StartDate;
}
Upvotes: 0
Reputation: 473
var isTodayInTerm = termsforcurrentCalendar.Any(a =>DateTime.Today >= a.StartDate && DateTime.Today <= a.EndDate);
if (!isTodayInTerm)
{
var firstAvailableDate = termsforcurrentCalendar.FirstOrDefault(z => z.StartDate > DateTime.Today);
datetoBeChecked = firstAvailableDate.StartDate;
}
Upvotes: 0