Иерархическое меню и LINQ to SQL

Monday, 30 June 08, 18:49 Z

Задача: есть блог; в БД существует таблица Post, в которой есть поле Modified; необходимо вывести в виде дерева все даты (год-месяц-день), которые соответствуют записям в блоге. Например вот так:

  • 2008
    • 04
      • 08
      • 05
      • 01
    • 03
      • 03
      • 02
    • 02
      • 01

У меня получился следующий код:

    public class DaysInMonth
    {
        public int Month
        {
            get;
            set;
        }

        public List<int> Days
        {
            get;
            set;
        }
    }

    public class MonthesInYear
    {
        public int Year
        {
            get;
            set;
        }

        public List<DaysInMonth> Monthes
        {
            get;
            set;
        }
    }

    ...

    ModelsDataContext db = new ModelsDataContext();

    var monthesInYear = db.Posts
        .GroupBy(post => post.Modified.Year, post => post.Modified)
        .OrderByDescending(group => group.Key)
        .Select(postsByYear =>
            new MonthesInYear {
                Year = postsByYear.Key,
                Monthes = postsByYear
                    .GroupBy(date => date.Month, date => date)
                    .OrderByDescending(group => group.Key)
                    .Select(datesInMonth =>
                        new DaysInMonth {
                            Month = datesInMonth.Key,
                            Days = datesInMonth
                                .Select(date => date.Day)
                                .Distinct()
                                .OrderByDescending(day => day)
                        }
                    )
            }
        );