2011-01-26 22 views
88

IGrouping'de "Değer" özelliğini al

public DespatchGroup(DateTime despatchDate, List<Products> products); 
gibi bir veri yapısına sahibim

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); 
} 
IGrouping
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); 
} 
grup içindeki kayıtlar!

+1

düzenlemek [(Rev2)] (http://stackoverflow.com/revisions/4804477/2) son derece yapıcı değildi diyebiliriz cevaplardan herhangi birini eşleştirin. –

cevap

112

grup IEnumerable<T> uygular - genel durumda, sadece group üzerinde foreach diyoruz. bu durumda, ne zamandan beri bir List<T> gerekir: IGrouping<T> kendisi değerlerin IEnumerable<T> dizisi çünkü

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

Yani temelde 'değer' sorusunun özünü izliyorsak, 'ToList()' ile karşılaştırılabilir, sadece orada bir listeye dönüştürmek için daha fazla bir yük var demektir. – Coops

+1

@CodeBlend daha var. çünkü bir liste istiyorlar. Hayal ettikleri gibi bir "Değerler" özelliği varsa, o zaman group.Values.ToList() 'yapmak zorunda kalacaklardı. Tersine bir liste yerine sayısız kabul edildiyse “yeni DespatchGroup (group.Key, group)” çalışırdı. Tepegöz, “Gruplandırma” çalışma biçiminden değil “DespachGroup” tanımından geliyor. –

24

hiçbir Values mülkiyet veya benzeri var. Diğer cevaplar söylediğimiz gibi, gruplandırma bir IEnumerable olduğundan, belirli bir erişmeniz gerekiyorsa -

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

Dilerseniz, bir IEnumerable'a dönüşebiliriz: 'group.AsEnumerable()'. –

12

Sadece ilgili ipucu: Bu durumda yapmanız gereken bir listeye bu diziyi dönüştürmek olduğunu index group.ElementAt(i)'u kullanabilirsiniz.

Bu, muhtemelen birçok insan için açıktır ama umarım birkaçına yardımcı olacaktır!

1

seçilen herhangi grubu için öyle değil olarak

var selectedGroupValues=selectedGroup.SelectMany(x=>x); 
İlgili konular