2013-08-13 2 views
-1

У меня есть это:Список групп в C# и Concat

class MyContact 
{ 
    public string firstname { get; set; } 
    public string lastname { get; set; } 
} 

MyContact c1 = new MyContact() { firstname = "Filipe", lastname = "Silva" }; 
MyContact c2 = new MyContact() { firstname = "Filipe", lastname = "Oliveira" }; 
MyContact c3 = new MyContact() { firstname = "Maria", lastname = "Santos" }; 
MyContact c4 = new MyContact() { firstname = "Jose", lastname = "Ricardo" }; 
MyContact c5 = new MyContact() { firstname = "Joao", lastname = "Roberto" }; 
MyContact c6 = new MyContact() { firstname = "Joao", lastname = "Augusto" }; 
MyContact c7 = new MyContact() { firstname = "Joao", lastname = "Mario" }; 

var cList = new List<MyContact>(); 
cList.AddRange(new MyContact[] { c1, c2, c3, c4, c5, c6, c7 }); 

И мне нужно GroupBy Firstname и CONCAT все lastnames.

Это мой ожидаемый результат:

Filipe - Silva|Oliveira 
Maria - Santos 
Jose - Ricardo 
Joao - Roberto|Augusto|Mario 

ответ

2

Вы можете использовать этот код для создания списка:

var result = new List<string>(); 

foreach (var group in cList.GroupBy(x => x.firstname)) 
{ 
    var lastnames = String.Join("|" , group.Select(x => x.lastname)); 
    result.Add(String.Format("{0} - {1}", group.Key, lastnames)); 
} 
+0

Это намного приятнее, чем мой. GroupBy - это путь – Mattsjo

+0

@Mattsjo, спасибо! :) – rpeshkov

0

другой вариант с Словаре:

var concat = new Dictionary<string, string>(); 
foreach (MyContact c in cList) 
{ 
    if (concat.ContainsKey(c.firstname)) 
     concat[c.firstname] += "|" + c.lastname; 
    else 
     concat.Add(c.firstname,c.lastname); 
} 

которые могут оказаться полезно, если вы хотите сохранить фамилию и фамилию, разделенные

Смежные вопросы