public Dictionary<string, List<string>> CountDomains() { var items = this.people.SelectMany(x => x.Contributions.Select(y => { var person = new People { Name = x.Name, URL = x.URL }; var expert = this.specialists.FirstOrDefault(z => z.Name == x.Name && z.URL == x.URL); if (expert != null) { var domains = expert.Skills.ToList(); domains.ForEach(z => person.AddSkill(z)); } return new { Person = person, Project = y.Project }; })).GroupBy(x => x.Project) .Select(x => new { Project = x.Key, Domains = x.SelectMany(y => y.Person.Skills).Distinct().ToList() // All of each persons domain will be added }) .ToDictionary(x => x.Project, x => x.Domains); return items; }