У меня есть коллекция записей.У которых есть два боксера, дата матча, местоположение и т.д ... Я хочу разделить их по месяцам и сгруппировать их вместе.На данный момент имею то что ниже.И это работает в определенной степени.Это ищет свидания в будущем.то есть в этом году и проходит каждый месяц (1-12) и находит любые совпадения в этом диапазоне дат.
Помещение в хороший словарь int, перечислимый, где int - это месяц, а enumberable - набор совпадений в этом месяце.
//Build the matches list by Months!!!
var summarysDic = new Dictionary<int, IEnumerable<MatchSummary>>();
for (int i = 1; i <= 12; i++)
{
var MatchesOfMonth = matches.Where(x => x.MatchDate.Value.Year == DateTime.Now.Year &&
x.MatchDate.Value.Month == i &&
!x.HasResult() &&
x.MatchDate.Value > DateTime.Now);
if (MatchesOfMonth.Count() > 0)
{
summarysDic.Add(i, MatchesOfMonth.OrderBy(x => x.MatchDate).Select(x=> new MatchSummary(x)).ToArray());
}
}
Проблема в том, что в настоящее время это касается только этого года.Вместо этого я хотел бы сделать так, чтобы это работало в течение «следующих 6 месяцев», но это, конечно, должно сработать и в течение нового года!
Какой лучший / самый чистый способ сделать это?
спасибо заранее!
PS на заметку, я пока не нашел, как, например, просто сделать DateTime.Now.Month.add (1) (как я всегда буду изтекущая дата вперед!)
----- КОД ЗАВЕРШЕН! -----
//Build the matches list by Months!!!
var summarysDic = new Dictionary<string, IEnumerable<MatchSummary>>();
for (int i = 1; i <= 12; i++)
{
var checkDate = DateTime.Now.AddMonths(i);
var MatchesOfMonth = matches.Where(x => x.MatchDate.Value.Month == checkDate.Month &&
x.MatchDate.Value.Year == checkDate.Year &&
!x.HasResult() &&
x.MatchDate.Value > DateTime.Now);
if (MatchesOfMonth.Count() > 0)
{
var firstMatchDate = MatchesOfMonth.First().MatchDate.Value;
if (firstMatchDate.Year != DateTime.Now.Year)
{
summarysDic.Add(firstMatchDate.ToString("MMMM yyyy"), MatchesOfMonth.OrderBy(x => x.MatchDate).Select(x => new MatchSummary(x)).ToArray());
}
else
{
summarysDic.Add(firstMatchDate.ToString("MMMM"), MatchesOfMonth.OrderBy(x => x.MatchDate).Select(x => new MatchSummary(x)).ToArray());
}
}
}