Reputation: 72222
I need some help with LINQ-2-SQL in order to group some blog posts by a year and month.
Basically, I have a collection of blog posts that have the following properties
I want to be able to iterate through each year, then iterate through every month of that year, and finally, iterate through every blog post within that month. Something like
etc...
Is there a way I can do this with a single LINQ query, using the group by clause?
Here's as far as I've got
var groupedBlogPosts = (from p in blogPostsFiltered
group p by new { month = p.Date.Month, year = p.Date.Year } into d
select new { postDate = string.Format("{0}/{1}", d.Key.month, d.Key.year), postCount = d.Count() });
Upvotes: 8
Views: 5734
Reputation: 134881
Here's an alternative if you don't want to do the projections and leave them as groupings.
var groupedBlogPosts =
from post in blogPostsFiltered
group post by new { post.Date.Year, post.Date.Month } into grouped
group grouped by new { grouped.Key.Year };
Upvotes: 5
Reputation: 3556
I haven't actually tested this, but it looks like a start, wrote this by looking at this msdn article:
var groupedBlogPosts =
from p in blogPostsFiltered
group p by p.Date.Year into yg
select
new
{
Year = yg.Key,
MonthGroups =
from o in yg
group o by o.Date.Month into mg
select new { Month = mg.Key, Posts = mg }
};
Look under the GroupBy - Nested
heading.
Upvotes: 10