Group List of Objects based on Property using Linq?

.net, c#, group-by, linq, list

Solution

It sounds like you want something like:

// No need to sort sites first
var grouped = sites.OrderBy(x => x.Type)
                   .GroupBy(x => x.Type);

Then just serialize `grouped`. However, I don't know quite what an `IGrouping` will look like in JSON... and the type will be present in each case. You may want something like:

var grouped = sites.OrderBy(x => x.Type)
                   .GroupBy(x => x.Type)
                   .Select(g => new { Type = g.Key,
                                      Sites = g.Select(site => new {
                                                           site.Title,
                                                           site.URL
                                                       } });

I think that would give you a nicer JSON structure.

Problem

I have an object: ``` public class SiteInfo { public string Title { get; set; } public string URL { get; set; } public string Type { get; set; } } ``` That I am using to create a list: var sites = new List(); ``` foreach (SPWeb site in web.GetSubwebsForCurrentUser()) { string sitetype = getConfigurationKey(site, "siteType"); //If sites have a site type then add to list if (sitetype != "*ERROR*" && sitetype != "*KEYNOTFOUND*") { SiteInfo s = new SiteInfo(); s.Title = site.Title; s.URL = site.Url; s.Type = sitetype; sites.Add(s); } } //sort list by type sites.Sort((x, y) => string.Compare(x.Type, y.Type)); // serialize and send.. JavaScriptSerializer serializer = new JavaScriptSerializer(); StringBuilder sbJsonResults = new StringBuilder(); serializer.Serialize(sites, sbJsonResults); etc..... ``` However what I would like to do is group the sites by Type prior to serializing them. Is this possible using LINQ or some other method.

Original source