using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class Test
{
public static void Main()
{
var myData = new []
{
new { Name = "Bill", Action="aaa", Id = "832758" },
new { Name = "Tony", Action="aaa", Id = "82fd58" },
new { Name = "Bill", Action="bbb", Id = "532758" },
new { Name = "Tony", Action="bbb", Id = "42fd58" }
};
// group all the Names together
var result = from m in myData
group m by m.Name into names
orderby names.Key
select names;
// go through each Name and combine the underlying Actions and Ids
var sbLines = new StringBuilder();
foreach (var name in result)
{
var sb = new StringBuilder();
sb.AppendFormat("Name: {0}, ", name.Key);
int count = 1;
foreach (var item in name)
{
if(count > 1)
sb.AppendFormat("Action_{0}: {1}, ", count, item.Action);
else
sb.AppendFormat("Action: {0}, ", item.Action);
count++;
}
count = 1;
foreach (var item in name)
{
if(count > 1)
sb.AppendFormat("Id_{0}: {1}, ", count, item.Id);
else
sb.AppendFormat("Id: {0}, ", item.Id);
count++;
}
sbLines.Append(sb.ToString().Trim(new char[] { ' ',',' }));
sbLines.Append(Environment.NewLine);
}
Console.WriteLine(sbLines.ToString());
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0OwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciBteURhdGEgPSBuZXcgW10gCgkJewoJCQluZXcgeyBOYW1lID0gIkJpbGwiLCBBY3Rpb249ImFhYSIsIElkID0gIjgzMjc1OCIgfSwKCQkJbmV3IHsgTmFtZSA9ICJUb255IiwgQWN0aW9uPSJhYWEiLCBJZCA9ICI4MmZkNTgiIH0sCgkJCW5ldyB7IE5hbWUgPSAiQmlsbCIsIEFjdGlvbj0iYmJiIiwgSWQgPSAiNTMyNzU4IiB9LAoJCQluZXcgeyBOYW1lID0gIlRvbnkiLCBBY3Rpb249ImJiYiIsIElkID0gIjQyZmQ1OCIgfQoJCX07CgkJCgkJLy8gZ3JvdXAgYWxsIHRoZSBOYW1lcyB0b2dldGhlcgoJCXZhciByZXN1bHQgPSBmcm9tIG0gaW4gbXlEYXRhCgkJZ3JvdXAgbSBieSBtLk5hbWUgaW50byBuYW1lcwoJCW9yZGVyYnkgbmFtZXMuS2V5CgkJc2VsZWN0IG5hbWVzOwoJCQoJCS8vIGdvIHRocm91Z2ggZWFjaCBOYW1lIGFuZCBjb21iaW5lIHRoZSB1bmRlcmx5aW5nIEFjdGlvbnMgYW5kIElkcwoJCXZhciBzYkxpbmVzID0gbmV3IFN0cmluZ0J1aWxkZXIoKTsKCQlmb3JlYWNoICh2YXIgbmFtZSBpbiByZXN1bHQpCgkJewoJCQl2YXIgc2IgPSBuZXcgU3RyaW5nQnVpbGRlcigpOwoJCQlzYi5BcHBlbmRGb3JtYXQoIk5hbWU6IHswfSwgIiwgbmFtZS5LZXkpOwoJCQoJCQlpbnQgY291bnQgPSAxOwoJCQlmb3JlYWNoICh2YXIgaXRlbSBpbiBuYW1lKQoJCQl7CgkJCQlpZihjb3VudCA+IDEpCgkJCQkJc2IuQXBwZW5kRm9ybWF0KCJBY3Rpb25fezB9OiB7MX0sICIsIGNvdW50LCBpdGVtLkFjdGlvbik7CgkJCQllbHNlCgkJCQkJc2IuQXBwZW5kRm9ybWF0KCJBY3Rpb246IHswfSwgIiwgaXRlbS5BY3Rpb24pOwoJCQkJY291bnQrKzsKCQkJfQoJCQoJCQljb3VudCA9IDE7CgkJCWZvcmVhY2ggKHZhciBpdGVtIGluIG5hbWUpCgkJCXsKCQkJCWlmKGNvdW50ID4gMSkKCQkJCQlzYi5BcHBlbmRGb3JtYXQoIklkX3swfTogezF9LCAiLCBjb3VudCwgaXRlbS5JZCk7CgkJCQllbHNlCgkJCQkJc2IuQXBwZW5kRm9ybWF0KCJJZDogezB9LCAiLCBpdGVtLklkKTsKCQkJCWNvdW50Kys7CgkJCX0KCQkKCQkJc2JMaW5lcy5BcHBlbmQoc2IuVG9TdHJpbmcoKS5UcmltKG5ldyBjaGFyW10geyAnICcsJywnIH0pKTsKCQkJc2JMaW5lcy5BcHBlbmQoRW52aXJvbm1lbnQuTmV3TGluZSk7CgkJfQoJCUNvbnNvbGUuV3JpdGVMaW5lKHNiTGluZXMuVG9TdHJpbmcoKSk7Cgl9Cn0=