2011-01-26 26 views
88

Mam strukturę danych jakGet "wartość" nieruchomości w IGrouping

public DespatchGroup(DateTime despatchDate, List<Products> products); 

i usiłuję zrobić ...

var list = new List<DespatchGroup>(); 

foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate)) 
{ 
    // group.Values is not correct... how do I write this? 
    list.Add(new DespatchGroup(group.Key, group.Values); 
} 

Ja oczywiście nie rozumiejąc IGrouping jak mogę” t zobaczyć, jak dotrzeć do rekordów danych w grupie!

+1

Ta zmiana [(Rev2)] (http://stackoverflow.com/revisions/4804477/2) nie było bardzo konstruktywne, ponieważ nie dopasować dowolną z odpowiedzi. –

Odpowiedz

112

Grupa realizuje IEnumerable<T> - W ogólnym przypadku, po prostu zadzwoń foreach nad group. W to przypadku, ponieważ potrzebny jest List<T>:

list.Add(new DespatchGroup(group.Key, group.ToList()); 
+0

Więc jeśli podążamy za esencją pytania "wartość" jest porównywalne do 'ToList()' tylko tam jest więcej narzutów, aby przekonwertować go do listy, a nie tylko wyciągnąć wartość – Coops

+1

@CodeBlend jest więcej narzut, ponieważ chcą listy. Jeśli istniała własność 'Values', tak jak to sobie wyobrażali, musieliby zrobić' group.Values.ToList() '. I odwrotnie, jeśli zaakceptują jakąkolwiek listę przeliczalną zamiast listy, wówczas działałoby "nowa grupa stron (grupa.Key, grupa)". Obciążenie pochodzi z definicji "DespachGroup", a nie ze sposobu, w jaki działa IGrouping. –

24

Nie ma właściwość Values lub podobny, ponieważ IGrouping<T> sama jest sekwencja wartości IEnumerable<T>. Wszystko, co trzeba zrobić w tym przypadku jest przekonwertować ciąg do listy:

list.Add(new DespatchGroup(group.Key, group.ToList()); 
+2

Możemy również przekonwertować na IEnumerable, jeśli chcemy: 'group.AsEnumerable()'. –

12

Wystarczy powiązany TIP - ponieważ, jak pozostałe odpowiedzi powiedział, grupowanie jest IEnumerable, jeśli chcesz mieć dostęp do konkretnego indeks można użyć group.ElementAt(i).

Jest to prawdopodobnie oczywiste dla wielu osób, ale mam nadzieję, że pomoże kilku!

1

Dla każdej wybranej grupy, można nazwać

var selectedGroupValues=selectedGroup.SelectMany(x=>x); 
Powiązane problemy