Разделение записей на отдельные месяцы для MVC - PullRequest
1 голос
/ 24 августа 2010

У меня есть коллекция записей.У которых есть два боксера, дата матча, местоположение и т.д ... Я хочу разделить их по месяцам и сгруппировать их вместе.На данный момент имею то что ниже.И это работает в определенной степени.Это ищет свидания в будущем.то есть в этом году и проходит каждый месяц (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());
                }

            }
        }

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Я полагаю, что вы можете получить то, что вы хотите, без существенного изменения вашего алгоритма:

//Build the matches list by Months!!!
var summarysDic = new Dictionary<int, IEnumerable<MatchSummary>>();
for (int i = 0; i <= 6; i++)
{
    var checkDate = DateTime.Now.AddMonths(i);
    var MatchesOfMonth = matches.Where(x => x.MatchDate.Value.Year == checkDate.Year &&
                        x.MatchDate.Value.Month == checkDate.Month &&
                        !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());
    }
}
0 голосов
/ 24 августа 2010

Что не так с DateTime.Now.AddMonth(1)?

var MatchesOfMonth = matches.Where(x => x.MatchDate.Value <= DateTime.Now.AddMonth(i)
                                   && !x.HasResult() 
                                   && x.MatchDate.Value > DateTime.Now);

Я не скомпилировал это, но он должен работать только с незначительными изменениями ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...