using System.Collections.Generic;
public class DigDisclosuresData
public DigDisclosures data { get; set; }
public class DigDisclosures
public List<Disclosures> disclosures { get; set; }
public List<GroupedDisclosures> slides { get; set; }
public class GroupedDisclosures
public string slideId { get; set; }
public List<Disclosure> disclosures { get; set; }
public string language { get; set; }
public string groupName { get; set; }
public static void Main()
var disclosures = MockData();
var disclosureLanguagesBySlideID = disclosures.data.disclosures
.SelectMany(disclosure => disclosure.slides)
.SelectMany(slide => slide.disclosures,
(slide, slideDisclosure) => new
{ slide.slideId, slideDisclosure.groupName, slideDisclosure.language }
var groupedDisclosuresBySiteId = disclosures.data.disclosures
.SelectMany(disclosure => disclosure.slides)
.SelectMany(slide => slide.disclosures, (slide, slideDisclosure) => new
slideDisclosure.groupName,
.GroupBy(disclosure => disclosure.groupName)
groupedDisclosures => groupedDisclosures.First().slideId,
groupedDisclosures => groupedDisclosures.Select(gd => gd.language)
disclosureLanguagesBySlideID
.ForEach(d => Console.WriteLine(d));
groupedDisclosuresBySiteId
Console.WriteLine(String.Format("[{0}]: ", kvp.Key));
.ForEach(disclosure => Console.WriteLine(disclosure));
public static Dictionary<string, List<Disclosure>> _SlideDisclosures { get; set; }
public static Dictionary<string, List<Disclosure>> SlideDisclosures
if (_SlideDisclosures == null)
_SlideDisclosures = new Dictionary<string, List<Disclosure>>();
disclosures.disclosures.ForEach(disclosure =>
disclosure.slides.ForEach(slide =>
if (!_SlideDisclosures.ContainsKey(slide.slideId))
List<Disclosure> groupedDisclosures = slide.disclosures.GroupBy(u => u.groupName)
.Select(grp => grp.ToList().Aggregate((Disclosure)null, (acc, cur) =>
return cur ?? new Disclosure();
acc.language = acc.language + " " + cur.language;
_SlideDisclosures.Add(slide.slideId, groupedDisclosures ?? new List<Disclosure>());
return _SlideDisclosures;
public static DigDisclosuresData MockData()
return new DigDisclosuresData()
data = new DigDisclosures()
disclosures = new List<Disclosures>
slides = new List<GroupedDisclosures>
disclosures = new List<Disclosure>
language = "I'm the first disclosure",
language = "I'm the second disclosure",
language = "I'm the third disclosure",
disclosures = new List<Disclosure>
language = "I'm the fourth disclosure",
language = "I'm the fifth disclosure",
language = "I'm the sixth disclosure",