Come posso raggruppare per una proprietà in una raccolta di oggetti usando LINQ?
Domanda
Ho una raccolta di oggetti come Dim XXX As IEnumerable (Of MyObject)
che è stata popolata. C'è una proprietà in MyObject che voglio raggruppare, ad esempio MyObject.MyCode.
Guardando attraverso gli esempi LINQ non è chiaro cosa stia facendo la sintassi Group XX By INTO
e non riesco a capirla.
Quindi quello che sto cercando è la possibilità di raggruppare in base al valore di MyCode e vedere quanti di ogni valore ho in XXX.
So di non averlo spiegato bene, ma spero che una persona di LINQ lo capisca.
Grazie
Ryan
Soluzione
Il seguente codice C # mostra come farlo (scusate, ma io non sono molto una persona VB.NET):
var myGroups = from p in myObject
group p by p.MyCode into g
select new { Category1 = g.Key, Category = g };
La parola chiave into prende sostanzialmente il risultato del gruppo e lo inserisce in un nuovo elemento a cui puoi fare riferimento nella porzione selezionata.
Altri suggerimenti
Fondamentalmente un " raggruppa per " l'operazione ha due proiezioni:
- Per cosa vuoi raggruppare? (La chiave)
- Cosa vuoi che contenga il gruppo? (Il valore)
Quindi, ad esempio, supponiamo di avere un gruppo di persone. Puoi raggruppare i loro nomi in base alla loro età, ad esempio
- 18: Bob, Jeff, Dave
- 21: Jennifer, Matt
ecc.
Se si utilizza la sintassi dell'espressione di query, ciò dipenderà dalla lingua utilizzata. Puoi effettivamente ignorare " in " parte per iniziare però - questa è solo una continuazione della query ; è come dire, " Non voglio più nessuna delle altre variabili che ho usato nella query, solo i risultati del raggruppamento " (che puoi quindi utilizzare nei bit successivi della query).
Dalla tabella di spedizione in ordine _
Raggruppa per spedizione.SpedizioneZip _
Nel totale = Somma (Shipment.Cost), Average (Shipment.Cost)