Saya memiliki struktur data seperti
public DespatchGroup(DateTime despatchDate, List<Products> products);
Dan saya mencoba melakukan ...
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);
}
Saya jelas tidak mengerti IGrouping
karena saya tidak bisa melihat bagaimana sebenarnya mendapatkan catatan data di dalam grup!
c#
linq
data-structures
igrouping
fearofawhackplanet
sumber
sumber
Jawaban:
-Alat Kelompok
IEnumerable<T>
- Dalam umum kasus, sebut sajaforeach
selamagroup
. Dalam hal ini, karena Anda membutuhkanList<T>
:list.Add(new DespatchGroup(group.Key, group.ToList());
sumber
value
ini sebanding denganToList()
hanya ada lebih banyak overhead di sana untuk mengubahnya menjadi daftar daripada hanya mengeluarkan nilaiValues
properti seperti yang mereka bayangkan maka mereka harus melakukannyagroup.Values.ToList()
. Sebaliknya jika mereka menerima enumerable apapun daripada daftar makanew DespatchGroup(group.Key, group)
akan berhasil. Overhead berasal dari definisiDespachGroup
bukan dari cara kerja IGrouping.Tidak ada
Values
properti atau serupa karenaIGrouping<T>
itu sendiri adalah yangIEnumerable<T>
urutan nilai. Yang perlu Anda lakukan dalam hal ini adalah mengubah urutan itu menjadi daftar:list.Add(new DespatchGroup(group.Key, group.ToList());
sumber
group.AsEnumerable()
.Untuk setiap grup yang dipilih, Anda dapat menelepon
var selectedGroupValues=selectedGroup.SelectMany(x=>x);
sumber
.Select
yang akan mengembalikan IGrouping <> lagi,.SelectMany
akan mengembalikan IEnumerable dari tipe nilai yang dikelompokkan, yang merupakan apa yang saya cari.IEnumerable<IGrouping<key,DespatchGroup>>
). Jika tidak, gunakantoList()
, atau cukup transmisikan keIEnumerable<DespatchGroup>
.Hanya tip terkait - karena, seperti yang dikatakan jawaban lain, pengelompokan adalah IEnumerable, jika Anda perlu mengakses indeks tertentu yang dapat Anda gunakan
group.ElementAt(i)
.Ini mungkin sudah jelas bagi banyak orang, tetapi semoga dapat membantu beberapa!
sumber