Untuk menjawab pertanyaan yang diedit: singkatnya, akan bermanfaat untuk menggunakan LINQ setiap kali Anda harus mengimplementasikan fungsionalitas "permintaan" (itulah yang dimaksud dengan Q dalam LINQ). Mendefinisikan domain yang tepat itu sulit, tetapi sangat menyederhanakan berbagai tugas yang terkait dengan mengekstraksi dan memanipulasi data dari koleksi.
Untuk menguraikan sedikit, banyak fungsi permintaan telah dibawa langsung ke dalam bahasa (atau lebih tepatnya, berbagai LINQ-implementors), sehingga hal-hal seperti agregasi, pemesanan, pengelompokan, pemfilteran, proyeksi, bergabung (dan banyak lagi) semuanya ditangani untuk kamu. Solusi berbasis LINQ juga biasanya jauh lebih pendek daripada jika Anda mengimplementasikannya "dengan tangan", dan juga mengomunikasikan maksud mereka jauh lebih baik.
Contoh sederhana yang sering membantu menyampaikan kekuatan LINQ adalah menampilkan konten direktori, dikelompokkan berdasarkan ekstensi. Jalankan melalui implementasi imperatif khas di kepala Anda - akan ada banyak detail implementasi sudah di awal. Mungkin kita akan menggunakan a Dictionary<String, List<String>>
untuk mengindeks file dengan ekstensi. Tentu saja, kita harus memeriksa apakah kunci sudah ada, instantiate daftar, tambahkan, dll. Mungkin ada sesuatu seperti:
Dictionary<string, List<string>> fileGroups = new Dictionary<string, List<string>>();
foreach (string file in Directory.GetFiles(Environment.CurrentDirectory))
{
string extension = Path.GetExtension(file).ToLower();
if (!fileGroups.ContainsKey(extension))
{
fileGroups[extension] = new List<string>();
}
fileGroups[extension].Add(file);
}
Pertimbangkan padanan LINQ:
var query = from file in Directory.GetFiles(Environment.CurrentDirectory)
group file by Path.GetExtension(file).ToLower();
Perhatikan bahwa kueri itu sendiri hanya 2 baris, tentu saja lebih pendek daripada solusi imperatif apa pun yang dapat kami buat. Ini juga cukup mudah dibaca; rasio signal-to-noise lebih tinggi daripada dengan solusi pertama. Bagi yang baru mengenal LINQ, Anda akan menampilkan hasil permintaan itu sebagai berikut:
foreach (var fileGroup in query)
{
Console.WriteLine(String.Format("*** Files with extension: {0}", group.Key));
foreach (string file in fileGroup)
{
Console.WriteLine(file);
}
}
Dengan contoh-contoh yang lebih kompleks, perbedaan biasanya menjadi lebih luas (misalnya, hanya mengelompokkan berdasarkan beberapa bidang). Jadi, untuk meringkas, LINQ memecahkan banyak masalah query data "sehari-hari" dengan cara yang seringkali lebih pendek dan lebih deskriptif diri. Ini datang dengan biaya ringan karena harus mempelajari sintaks dan teknologi, tetapi manfaatnya jauh lebih besar daripada yang negatif.