Cara Mendapatkan Daftar Nama yang Berbeda, Terurut dari DataTable dengan LINQ

Menggunakan LINQ untuk memanipulasi data dari DataTable bisa sangat kuat, tetapi juga bisa mengarah pada hasil yang tidak terduga jika tidak ditangani dengan benar. Dalam postingan blog ini, kita akan mengeksplorasi masalah umum: menghasilkan daftar nama unik yang terurut dari DataTable. Kita akan membahas mengapa kueri yang sederhana mungkin tidak memberikan urutan yang diharapkan dan memberikan solusi yang terstruktur.

Masalah

Anda memiliki DataTable yang mengandung kolom untuk nama, dan Anda ingin mengekstrak koleksi nama yang berbeda yang diurutkan secara alfabet. Sebuah kueri LINQ yang khas terlihat seperti ini:

var names =
    (from DataRow dr in dataTable.Rows
    orderby (string)dr["Name"]
    select (string)dr["Name"]).Distinct();

Sekilas, ini terlihat benar, tetapi Anda mungkin memperhatikan bahwa klausa orderby tidak menegakkan urutan yang diharapkan dalam hasil akhir. Mengapa demikian?

Memahami Masalah

Ketika Anda menggunakan metode Distinct() setelah pengurutan, ini seringkali dapat menyebabkan kebingungan. Proses mendapatkan nilai yang berbeda terpisah dari bagaimana nilai-nilai tersebut diurutkan.

Mengapa Pengurutan Mungkin Tidak Bekerja

  • Metode Distinct() mungkin tidak mempertahankan urutan yang ditetapkan oleh orderby. Ketika ia memproses data, ia hanya fokus pada nilai yang berbeda tanpa mempertahankan urutan.

Untuk mencapai kedua aspek yaitu kebedaan dan urutan, kita perlu menyesuaikan pendekatan LINQ kita.

Solusi Terstruktur

Untuk memastikan bahwa Anda mendapatkan nama yang berbeda dan terurut, Anda dapat membagi proses menjadi tiga langkah yang jelas:

Langkah 1: Pilih Nama ke dalam Daftar Baru

Pertama, kumpulkan semua nama ke dalam sebuah koleksi. Anda mungkin melakukan proyeksi selama tahap ini jika diperlukan.

var x1 = 
    (from DataRow dr in dataTable.Rows
    select (string)dr["Name"]).ToList();

Langkah 2: Buat Daftar yang Berbeda

Selanjutnya, buat daftar yang berbeda dari koleksi yang diperoleh pada Langkah 1. Langkah ini akan menyaring duplikat.

var x2 = x1.Distinct().ToList();

Langkah 3: Buat Daftar yang Terurut

Akhirnya, ambil daftar yang berbeda dan urutkan secara alfabet.

var orderedNames = x2.OrderBy(name => name).ToList();

Contoh Kode Lengkap

Berikut adalah tampilan lengkap kode ketika disatukan:

var x1 = 
    (from DataRow dr in dataTable.Rows
    select (string)dr["Name"]).ToList();

var x2 = x1.Distinct().ToList();

var orderedNames = x2.OrderBy(name => name).ToList();

Kesimpulan

Dengan memecah kueri LINQ menjadi beberapa bagian, kita dapat secara efektif mendapatkan daftar nama yang berbeda dari DataTable yang juga terurut secara alfabet. Metode ini meningkatkan keterbacaan dan pemeliharaan kode Anda, memastikan bahwa setiap langkah dari proses ini jelas dan logis.

Pendekatan terstruktur ini menjamin bahwa Anda akan mengekstrak nama unik dalam urutan yang Anda inginkan, menjadikannya solusi yang dapat diandalkan dalam proyek pengembangan C# Anda.

Silakan mencoba metode ini dan lihat bagaimana hasilnya pada kebutuhan data Anda!