IGrouping'de "Value" özelliğini edinin


141

Benim gibi bir veri yapım var

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

Ve yapmaya çalışıyorum ...

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);
}

Açıkçası anlamadım IGroupingçünkü aslında grup içindeki veri kayıtlarına nasıl ulaşacağımı göremiyorum!


1
Düzenleme (Rev2) yanıtların hiçbiriyle eşleşmediği için çok yapıcı değildi.
Sunny Patel

Yanıtlar:


170

Grup uygular IEnumerable<T>- In genel durumda, sadece ara foreachüzerinde group. Gelen bu durumda, ne zamandan beri bir ihtiyaç List<T>:

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

Böylece temelde söz özünü takip ediyorlarsa valuekarşılaştırılabilir ToList()sadece orada daha bir yükü sadece bir değeri dışarı çekerek aksine bir listeye orada dönüştürmek
Coops

2
@CodeBlend daha fazla yükü var çünkü bir liste istiyorlar. Eğer Valueshayal ettikleri gibi bir mülk olsaydı, yapmaları gerekirdi group.Values.ToList(). Tersine, bir liste yerine herhangi bir numaralandırmayı kabul ederlerse new DespatchGroup(group.Key, group)işe yarayacaktır. Genel gider, DespachGroupIGrouping'in çalışma şeklinden değil.
Jon Hanna

35

Hiçbir var Valuesçünkü mülkiyet veya benzeri IGrouping<T>kendisi olduğuIEnumerable<T> değerlerin dizisi. Bu durumda yapmanız gereken tek şey bu diziyi bir listeye dönüştürmektir:

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

6
Biz isterseniz Biz de bir IEnumerable dönüştürmek olabilir: group.AsEnumerable().
Mateen Ulhaq

22

Seçilen herhangi bir grup için

var selectedGroupValues=selectedGroup.SelectMany(x=>x);

2
Teşekkürler! .SelectTekrar bir IGrouping <> döndürecek olandan farklı olarak, sonradan aldığım değer olan groeded .SelectManydeğerlerin türünden bir IEnumerable döndürecektir.
K0D4

Bunu yalnızca (potansiyel olarak) birden fazla grup seçildiğinde kullanın. (aka IEnumerable<IGrouping<key,DespatchGroup>>). Aksi takdirde kullanın toList()veya basitçe yayınlayın IEnumerable<DespatchGroup>.
apple apple

21

Sadece ilgili bir ipucu - diğer cevapların söylediği gibi, kullanabileceğiniz belirli bir dizine erişmeniz gerekiyorsa gruplama IEnumerable olur group.ElementAt(i).

Bu muhtemelen birçok insan için açıktır, ancak umarım birkaç yardım eder!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.