2013-07-28 5 views
3

У меня есть файл, который содержит информацию разобранную из листа Excel:Выбор подобных элементов из того же списка

class ProfileRecord 
{ 
    public string ProfileCode { get; set; } 
    public string DID { get; set; } 
    public string AppName { get; set; } 
    public string lvl1 { get; set; } 
    public string lvl2 { get; set; } 
    public string lvl3 { get; set; } 
    public string lvl4 { get; set; } 
} 

В другом классе, я посылаю список этих записей для анализа. Одна вещь, которую я хочу сделать, это сделать var, который найдет все подходящие ProfileCodes. Так, скажем, часть листа Эксел:

Name  Profile Code 
Billy 134 
Sally 156 
Mary  134 
Jimmy 134 
Tom  189 

Тогда я бы что-то (я действительно не знаю):

var sameProfile = from a in profileList 
        where (//some code to group all similar profile codes) 
        select new 
        { 
        name = a.Name 
        }; 

Если бы я был напечатать:

foreach(var p in sameProfile) 
{ 
    Console.WriteLine(p.name); 
    Console.WriteLine("\n"); 
    } 

I хотят иметь:

Billy 
Mary 
Jimmy 

Sally 

Tom 

Отпечатано. Я не уверен, как найти все элементы simialr и сгруппировать их с помощью LINQ. Предложения? Спасибо.

+0

Это выглядит как группа по сделает это. проверьте: http://stackoverflow.com/questions/7325278/group-by-in-linq –

ответ

5

Использование Enumerable.GroupBy:

var profileCodeGroups = profileList 
    .GroupBy(pr => pr.ProfileCode) 
    .OrderBy(g => g.Key); 

foreach(var grp in profileCodeGroups) 
{ 
    foreach(var pr in grp) 
     Console.WriteLine(pr.Name); 
    Console.WriteLine(""); 
} 
+0

Awwww да. Это красиво. Я забыл о GroupBy. благодаря – Cassus

2

Вы хотите использовать GroupBy метод:

var results = profileList.GroupBy(a => a.ProfileCode) 
         .Select(g => g.Select(a => a.Name)); 

Или в синтаксисе запроса:

var results = 
    from a in profileList 
    group a by a.ProfileCode into g 
    select g.Select(a => a.Name); 
Смежные вопросы