c# - Obtiene la propiedad "Valor" en IGrouping
linq data-structures (4)
Tengo una estructura de datos como
public DespatchGroup(DateTime despatchDate, List<Products> products);
Y estoy tratando de hacer ...
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);
}
¡Obviamente no entiendo IGrouping
ya que no puedo ver cómo llegar a los registros de datos dentro del grupo!
El grupo implementa IEnumerable<T>
- En el caso general , simplemente llame a foreach
sobre el group
. En este caso, ya que necesita una List<T>
:
list.Add(new DespatchGroup(group.Key, group.ToList());
No hay propiedad de Values
o similar porque IGrouping<T>
sí mismo es la secuencia de valores IEnumerable<T>
. Todo lo que necesita hacer en este caso es convertir esa secuencia en una lista:
list.Add(new DespatchGroup(group.Key, group.ToList());
Para cualquier grupo seleccionado, puede llamar
var selectedGroupValues=selectedGroup.SelectMany(x=>x);
Solo un consejo relacionado, ya que, como han dicho otras respuestas, la agrupación es un IEnumerable, si necesita acceder a un índice específico, puede usar group.ElementAt(i)
.
Esto es probablemente obvio para mucha gente, pero espero que ayude a algunos.