Saya tidak tahu apakah ini mungkin di Linq tapi begini ...
Saya punya objek:
public class User
{
public int UserID { get; set; }
public string UserName { get; set; }
public int GroupID { get; set; }
}
Saya mengembalikan daftar yang mungkin terlihat seperti berikut:
List<User> userList = new List<User>();
userList.Add( new User { UserID = 1, UserName = "UserOne", GroupID = 1 } );
userList.Add( new User { UserID = 2, UserName = "UserTwo", GroupID = 1 } );
userList.Add( new User { UserID = 3, UserName = "UserThree", GroupID = 2 } );
userList.Add( new User { UserID = 4, UserName = "UserFour", GroupID = 1 } );
userList.Add( new User { UserID = 5, UserName = "UserFive", GroupID = 3 } );
userList.Add( new User { UserID = 6, UserName = "UserSix", GroupID = 3 } );
Saya ingin dapat menjalankan kueri Linq pada daftar di atas yang mengelompokkan semua pengguna berdasarkan GroupID. Jadi output akan menjadi daftar daftar pengguna yang berisi pengguna (jika itu masuk akal?). Sesuatu seperti:
GroupedUserList
UserList
UserID = 1, UserName = "UserOne", GroupID = 1
UserID = 2, UserName = "UserTwo", GroupID = 1
UserID = 4, UserName = "UserFour", GroupID = 1
UserList
UserID = 3, UserName = "UserThree", GroupID = 2
UserList
UserID = 5, UserName = "UserFive", GroupID = 3
UserID = 6, UserName = "UserSix", GroupID = 3
Saya sudah mencoba menggunakan klausa groupby linq tetapi ini sepertinya mengembalikan daftar kunci dan tidak dikelompokkan dengan benar:
var groupedCustomerList = userList.GroupBy( u => u.GroupID ).ToList();
Pernyataan grup Anda akan dikelompokkan berdasarkan ID grup. Misalnya, jika Anda kemudian menulis:
itu seharusnya bekerja dengan baik. Setiap grup memiliki kunci, tetapi juga berisi
IGrouping<TKey, TElement>
yang merupakan koleksi yang memungkinkan Anda untuk beralih dari anggota grup. Seperti yang disebutkan Lee, Anda dapat mengonversikan setiap grup ke daftar jika Anda benar-benar ingin, tetapi jika Anda hanya akan mengulanginya sesuai kode di atas, tidak ada manfaat nyata untuk melakukannya.sumber
Untuk tipe
koleksi
permintaan LINQ kami terlihat seperti di bawah ini
atau untuk array bukan daftar seperti di bawah ini
sumber
Masih yang lama, tetapi jawaban dari Lee tidak memberi saya grup. Oleh karena itu, saya menggunakan pernyataan berikut untuk mengelompokkan daftar dan mengembalikan daftar yang dikelompokkan:
Setiap grup sekarang memiliki kunci, tetapi juga berisi IGrouping yang merupakan koleksi yang memungkinkan Anda untuk beralih ke anggota grup.
sumber
group.key
elemen ketika iterasi melalui daftar yang dikelompokkan seperti ditunjukkan dalam jawaban oleh @JohnSkeet. Jawaban saya yang disediakan memang menyediakan elemen group.key saat iterasi. Jadi mungkin membantu orang lain jatuh ke dalam perangkap bahwa jawaban yang diberikan tidak berfungsi seperti yang ditunjukkan di atas. Jadi itu hanyalah cara lain untuk mendapatkan daftar dengan manfaat mendapatkan elemen group.key mirip dengan jawaban yang diterima. Jangan mengerti klaim Anda @GertArnold. (.net core 3.0)IGrouping
itu. Itu sebabnya OP membuang kode mereka sendiri di bagian bawah, yang pada dasarnya identik dengan kode Anda. Itu sebabnya mereka menerima jawaban yang memberikan apa yang mereka minta. Yang mereka butuhkan adalah penjelasan, yang disediakan JS dengan cukup.