using System.Collections.Generic;
public static void Main()
IEnumerable<RoleDenormalize> denormalizeRoles = GetRoles();
var groupedData = denormalizeRoles.GroupBy(x=> new {x.Id, x.Name}, (key,values) => new { Role = key, Tags = values.Where(x=> !string.IsNullOrWhiteSpace(x.TagName)).ToList()});
List<Role> mappedData = groupedData.Select(x=> new Role{ Id = x.Role.Id, Name = x.Role.Name, Tags = x.Tags.Select(y=> new Tag{Name = y.TagName}).ToList()}).ToList();
foreach(var item in mappedData){
Console.WriteLine($"{item.Id} | {item.Name}");
foreach(var tags in item.Tags){
Console.WriteLine($"Tag : {tags.Name}");
Console.WriteLine("------------");
public static List<RoleDenormalize> GetRoles(){
var list = new List<RoleDenormalize>();
var role1 = new RoleDenormalize{
var role2 = new RoleDenormalize{
var role3 = new RoleDenormalize{
public class RoleDenormalize {
public string Name {get;set;}
public string TagName {get;set;}
public string Name {get;set;}
public List<Tag> Tags {get;set;}
public string Name {get;set;}