Düzenlenen soruyu cevaplamak için: Kısacası, "sorgu" işlevselliğini (LINQ'daki Q'nun anlamı budur) uygulamak zorunda kaldığınızda LINQ kullanmak yararlıdır. Tam bir alan tanımlamak zordur, ancak koleksiyonlardan veri ayıklamak ve değiştirmekle ilişkili çeşitli görevleri büyük ölçüde basitleştirir.
Hafifçe detaylandırmak için, doğrudan dile (veya daha ziyade çeşitli LINQ uygulayıcılarına) çok sayıda sorgu işlevselliği getirildi, böylece toplamalar, sıralama, gruplama, filtreleme, projeksiyonlar, birleşimler (ve daha fazlası) sen. LINQ tabanlı çözümler de tipik olarak bunları "elle" uygulamanızdan ve aynı zamanda niyetlerini çok daha iyi iletmekten çok daha kısadır.
LINQ'nun gücünü aktarmaya yardımcı olan basit bir örnek, bir dizinin içeriğini uzantıya göre gruplandırılmış olarak görüntülemektir. Kafanızda tipik bir zorunlu uygulamadan geçin - başlangıçta çok sayıda uygulama ayrıntısı olacaktır. Belki de Dictionary<String, List<String>>
dosyaları uzantılarına göre dizine eklemek için a kullanırız. Tabii ki, bir anahtarın zaten var olup olmadığını kontrol etmeliyiz, bir liste başlatmalı, ekleyeceğiz, vb.
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);
}
LINQ eşdeğerini düşünün:
var query = from file in Directory.GetFiles(Environment.CurrentDirectory)
group file by Path.GetExtension(file).ToLower();
Sorgunun kendisinin sadece 2 satır olduğunu, kesinlikle gelebilecek herhangi bir zorunlu çözümden daha kısa olduğuna dikkat edin. Ayrıca oldukça okunabilir; sinyal-gürültü oranı ilk çözümdekinden daha yüksektir. LINQ'da yeni olanlar için, bu sorgunun sonuçlarını aşağıdaki gibi çıkarırsınız:
foreach (var fileGroup in query)
{
Console.WriteLine(String.Format("*** Files with extension: {0}", group.Key));
foreach (string file in fileGroup)
{
Console.WriteLine(file);
}
}
Daha karmaşık örneklerle, farklar normalde daha da genişler (örneğin, birden çok alana göre gruplandırmayı düşünün). Özetlemek gerekirse, LINQ birçok "günlük" veri sorgulama problemini genellikle daha kısa ve daha açıklayıcı bir şekilde çözmektedir. Bu, sözdizimini ve teknolojiyi öğrenmek zorunda kalmanın hafif bir maliyeti vardır, ancak faydalar olumsuzluklardan büyük ölçüde ağır basar.