2012-04-03 3 views
3

У меня есть список объектов на C#. Все объекты содержат свойства code1 и code2 (среди других свойств).Групповые объекты с соответствующими свойствами в Списки

Пример:

List -> object = id, name, code1, code2, hours, amount. 

Есть 31 возможных значений code1. Существует 10 возможных значений кода2.

мне нужно сгруппировать все объекты, имеющие одни и те же code1 и Кодекса2 значения (уникальная комбинация) в свои собственные списки, которые будут сохранены в родительском списке (таким образом, чтобы каждый отдельный список может повторяться более позднее.)

+0

Вы пробовали фильтровать свой список с помощью LINQ? Он упрощает фильтрацию списка с помощью синтаксиса Sql Query. – phadaphunk

ответ

9

Похоже, вы хотите что-то вроде:

var groups = list.GroupBy(x => new { x.code1, x.code2 }); 

// Example of iterating... 
foreach (var group in groups) 
{ 
    Console.WriteLine("{0}/{1}:", group.Key.code1, group.Key.code2); 
    foreach (var item in group) 
    { 
     Console.WriteLine(" {0} ({1})", item.id, item.name); 
    } 
} 
+0

Это именно то, что мне нужно. Спасибо за решение и пример итерации. – Baxter

+0

Будет ли он работать так же, как если бы я передал его новому объекту => list.GroupedBy (x => новый TempObject {x.code1, x.code2}); – cpoDesign

4

перечислимых расширений является вашим другом (это * ваши друзья :)

var groups = lists.GroupBy(item => new { item.code1, item.code2 }); 

И .... л? egendary Skeet hit post, прежде чем я это сделал, SHAME!

Время до одного Скита (га, справа). Вы также можете группировать свои общие предметы в словаре.

var mapping = list 
    .GroupBy(item => new { item.code1, item.code2 }) 
    .ToDictionary(g => g.Key, g => g.ToList()); 

В настоящее время сопоставление является Dictionary<anon{code1, code2}, List<YourObject>>. Конечно, вы можете оставить значение ToList для значения, а тип значения словаря будет IGrouping, который является IEnumerable.

Вы также можете использовать ToLookup

var lookup = list.ToLookup(item => new { item.code1, item.code2 }); 

Результатом является ILookup, который имеет ключ ключа типа данного, и является IEnumerable типа списка используемых. Это не словарь, но его можно использовать аналогично.

+2

Было бы проще использовать 'list.ToLookup (x => new {item.code1, item.code2})' :) –

+1

Спасибо, что помогли мне разобраться ... :) – payo

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

  • Нет связанных вопросов^_^