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.