LINQ sorguları oluşturmak için Distinct ve Except metotları hakkında bilgi arıyorsanız doğru yerdesiniz! Bu yazıda, LINQ sorguları oluşturmak için iki önemli metot olan Distinct ve Except'ın nasıl kullanılabileceğini öğreneceksiniz Ayrıca bu metotların ne zaman ve neden kullanılması gerektiği hakkında da detaylı bilgi alabileceksiniz LINQ sorgularınızı optimize etmek ve verimliliği artırmak için bu metotları kullanarak sorgularınızı daha etkili hale getirebilirsiniz
Birçok zaman, verileri sorgulamanız, bir koleksiyonu filtrelemeniz veya bir sıralama yöntemi uygulamanız gerekir. Bu tür eylemleri gerçekleştirmek için LINQ (Language Integrated Query) kullanabilirsiniz. LINQ, .NET Framework'ü içinde yer alan bir sorgulama aracıdır ve C# veya VB.NET gibi programlama dillerini kullanarak farklı veri kaynaklarına erişmek için kullanılır.
Bu makalede, Distinct ve Except metotları gibi LINQ sorguları nasıl oluşturulur, neler yapabilirler ve ne zaman kullanılırlar gibi konuları ele alacağız. Her bir metot için örnek bir kod ve açıklama göreceksiniz.
LINQ Nedir?
LINQ (Dil Entegre Sorgulama), .NET Framework içinde yer almakta olan ve C# ve VB.NET dillerinde kullanılabilen bir sorgulama aracıdır. LINQ, SQL benzeri bir yapıda kullanılarak farklı veri kaynaklarına erişim sağlayabilen geniş bir dildir. XML belgeleri, SQL veritabanları, web servisleri, nesne koleksiyonları veya dosya sistemi gibi çeşitli veri kaynaklarına sorgular yapılabilmektedir.
Distinct Metodu
Distinct metodu, bir koleksiyonun veya sorgunun öğelerini tekrarlanan öğeleri kaldırarak yeni bir koleksiyon oluşturur. Bu metot, LINQ sorguları oluştururken oldukça kullanışlıdır.
Bir örnek üzerinden Distinct metodu açıklanabilir. Elimizdeki bir sayı dizisinde tekrar eden sayıları ayırarak yeni bir dizi oluşturalım. Aşağıdaki kod parçasında, sayılar dizisinde tekrarlanan 1, 2 ve 3 sayılarını Distinct metodu ile kaldırarak sadece farklı olan sayıları içeren yeni bir dizi oluşturduk.
Kod Örneği: | int[] sayilar = {1, 2, 3, 2, 4, 5, 1, 3}; var farkliSayilar = sayilar.Distinct(); //1, 2, 3, 4, 5 |
Açıklama: | Sayılar dizisinde tekrar eden 1, 2 ve 3 sayılarını Distinct metodu ile kaldırdığımızda yeni bir dizi oluşur ve bu dizi sadece farklı olan sayıları içerir. |
Distinct metodu, LINQ sorgularında kullanılabilecek farklı veri tiplerindeki öğeleri de ayırabilir. Bu sayede bir sorgu sonucunda elde edilen verilerde tekrarlanan öğelerin olması durumunda Distinct metodu ile bu öğeler kaldırılıp sadece farklı öğeler elde edilebilir.
Distinct Metodu Örneği
Bu örnekte Distinct metodu kullanarak bir sayı dizisinde tekrarlı olan sayıları ayıralım. Örneğin, elimizde şu sayı dizisi olsun: {1, 2, 3, 2, 4, 5, 1, 3}. Bu dizide 1, 2 ve 3 sayıları tekrar eden sayılar. Distinct metodu kullanarak, öncelikle bu sayıların sadece bir kez geçmesini istiyoruz. Sonuç olarak tekrarlamaları sileceğimiz yeni bir dizi oluşturacağız.
Sayı Dizisi | Yeni Dizi (Distinct Metodu Sonrası) |
---|---|
{1, 2, 3, 2, 4, 5, 1, 3} | {1, 2, 3, 4, 5} |
Gördüğünüz gibi, Distinct metodu sayesinde tekrarlanan sayılar kaldırılarak sadece bir kez bulunan sayılarla oluşan yeni bir dizi oluşturuldu. Bu yöntem koleksiyonlarda veya sorgularda kullanılarak, veri manipülasyonu işlemlerinde oldukça etkilidir.
Kod Örneği:
Siz de LINQ sorgularında Distinct metotunu kullanarak büyük veri kümelerinde tekrar eden öğeleri ayırabilirsiniz. Distinct metodu kullanımı oldukça basittir. Hemen bir örnek verelim:
Değişken | Değer |
---|---|
int[] sayilar | {1, 2, 3, 2, 4, 5, 1, 3} |
Yukarıdaki kod örneğinde distinc metodu için veri kümemiz elimizdeki 'sayilar' dizisidir. Bu dizinin tekrar eden elemanlarını çıkartarak yeni bir dizi oluşturacağız.
var farkliSayilarYukarıda verilen kod örneğinde, sayilar adlı dizide tekrar eden sayılar bulunmaktadır. Bu durumda Distinct metodu kullanılarak tekrar eden sayılar kaldırılmış ve yeni bir dizi oluşturulmuştur. Oluşturulan yeni dizi, sadece tekrar etmeyen sayıları içermektedir. Yani her bir sayı bir defa yer almaktadır ve sıralama yapılmıştır.
Bu işlem sırasında, orijinal dizideki sıralama korunmuştur ve yeni diziye sıralı bir şekilde aktarılmıştır. Distinct metodu uygulanırken, ilk tekrar eden öğe korunur ve sonraki tekrar eden öğeler atılır. Böylece, oluşturulan yeni dizi, tekrar etmeyen ve sıralanmış bir şekilde elemanlar içermektedir.
Tablo halinde göstermek gerekirse;
Orjinal Dizi | Yeni Dizi |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
2 | 4 |
4 | 5 |
5 | |
1 | |
3 |
Yukarıdaki tabloda da görüldüğü üzere, Distinct metodu sayesinde orijinal dizideki tekrar eden öğeler kaldırılmış ve yeni bir dizi oluşturulmuştur. Böylece, yeni dizi daha sade ve okunaklı hale gelmiştir.
Açıklama:
Yukarıdaki kod örneğindeki sayı dizisi içinde 1, 2 ve 3 tekrar eden sayılar olarak verilmiştir. Ancak Distinct() fonksiyonunu kullandığımızda bu değerler sadece birer kez görünecektir. Yani, yeni oluşturduğumuz farklı sayılar dizisi 1, 2, 3, 4 ve 5 sayıları içerecektir. Bu metot değişken sayıda veri elemanları içeren listelerde kullanılır ve gardiyan ifadeler yazmaktan kurtulunur. Ayrıca, Distinct metodu ile sadece sayılar değil, string, char, bool vb. tiplerdeki verilerin tekrarlanan elemanları kolayca temizlenebilir.
Except Metodu
Except metodu, LINQ sorguları oluştururken iki koleksiyon arasındaki farkı bulmak için kullanılır. Genellikle bu metot, birden fazla koleksiyonun verilerini karşılaştıran bir sorgulama işleminde çok işlevsel olabilir.
Örneğin, bir mağazanın stok takibi yaparken, depodaki ürünlerin listesiyle satış sırasında tükenen ürünlerin listesini karşılaştırmak için Except metodu kullanılabilir. Bu sayede satış sonrası kalan ürünlerin listesi otomatik olarak oluşturulabilir.
Except metodu, birden fazla veri tipiyle de uyumludur. Örneğin, bir koleksiyonda stringların yanı sıra integer veriler de olabilir. Except metodu, otomatik olarak tüm veri tiplerini karşılaştırır ve sadece farklı olanları döndürür.
Except Metodu Örneği
Except metodu, LINQ sorgularında iki koleksiyon arasındaki farkı bulmak için kullanılır. Bu metot, iki koleksiyon arasındaki ortak öğeleri ayıklar ve yeni bir koleksiyon oluşturur. Örneğin, elimizde iki farklı sayı dizisi varsa ve bu dizilerdeki ortak sayıları ayırıp yeni bir dizi oluşturmak istiyoruz, bu durumda Except metodu bize yardımcı olabilir.
Aşağıdaki örnekte ilk dizide 1, 2, 3, 4 ve 5 sayıları bulunurken, ikinci dizide 3, 4, 5, 6 ve 7 sayıları bulunmaktadır. Except metodu kullanarak, ilk dizideki ortak olan 3, 4 ve 5 sayıları, ikinci diziden çıkarılır ve yeni bir dizi oluşturulur. Bu yeni dizi sadece 1 ve 2 sayılarını içermektedir.
int[] sayilar1 = {1, 2, 3, 4, 5}; int[] sayilar2 = {3, 4, 5, 6, 7}; var farkliSayilar = sayilar1.Except(sayilar2); //1, 2
Yukarıdaki örnek kodda, ilk önce iki sayı dizisi tanımlanır. Ardından Except metodu kullanılarak, sayilar1 dizisindeki ortak olan 3, 4 ve 5 sayıları, sayilar2 dizisinden çıkarılır. Böylece yeni bir dizi oluşturulur ve bu dizi sadece 1 ve 2 sayılarını içerir.
Except metodu, LINQ sorgularında oldukça kullanışlı bir metottur ve iki koleksiyon arasındaki farkı bulmak için sıklıkla tercih edilir. Bu sayede kolaylıkla istediğimiz verileri elde edebilir ve kod yazarken daha fazla zaman kazanabiliriz.
Kod Örneği:
Kod örneğinde elimizdeki sayılar1 dizisinde 1, 2, 3, 4 ve 5 olmak üzere beş adet sayı bulunmaktadır. Bu sayılar, aynı sıra ile dizi içerisinde tanımlandıktan sonra, koleksiyon formlarında saklanmaktadır. Koleksiyonlar, veri yapıları arasında yer alan ve birbirleriyle ilişkilli olan elemanların oluşturduğu yapılar olarak adlandırılır. Sayılar1 dizisi de bir koleksiyondur ve dizinin içerisinde yer alan elemanlar bireysel olarak değil, koleksiyon formu içerisinde sunulmaktadır.
int[] sayilar2Sayilar2 dizisi, elimizdeki bir diğer sayı dizisi. Bu dizi içerisinde 3, 4, 5, 6 ve 7 sayıları bulunmaktadır. İhtiyacımız olan bir sorguda bu diziyi kullanarak farklı bir dizi oluşturabiliriz. Bahsettiğimiz sorgu, iki dizinin farklı elemanlarını bulmaktadır. Yani sayilar1 ve sayilar2 dizilerini kullanarak, sayilar1 dizisinde olup sayilar2 dizisinde olmayan sayıları çıktı olarak elde etmek istediğimizi varsayalım.
Bu işlem için ilk olarak Except metodu kullanmamız gerekiyor. Kodumuzu önceki örnekteki gibi yazarsak:
Kod Örneği: | int[] sayilar1 = {1, 2, 3, 4, 5}; |
int[] sayilar2 = {3, 4, 5, 6, 7}; | |
var farkliSayilar = sayilar1.Except(sayilar2); | |
Çıktı: | 1, 2 |
Gördüğünüz gibi farkliSayilar isimli yeni bir dizi oluşturduk ve burada sayilar1 dizisindeki 1 ve 2 sayılarını elde ettik. Tabii bu örnekte elimizde sadece 5 elemanlı diziler olduğu için cevabı gözle dekolte edebiliyoruz ancak çok daha büyük dizilerde bu işlemi yapabilmek için LINQ sorgularını kullanmamız gerekiyor.
var farkliSayilarÖrnek kodda, var farkliSayilar = sayilar1.Except(sayilar2); //1, 2, iki farklı sayı dizisi arasındaki farkı bulmak için kullanılan Except metodu kullanılmıştır. Bu örnekte, sayilar1 dizisi 1, 2, 3, 4 ve 5 sayılarını içerirken, sayilar2 dizisi 3, 4, 5, 6 ve 7 sayılarını içermektedir. Bu iki dizi arasındaki farkı bulmak ve sadece sayilar1 dizisinde yer alan 1 ve 2 sayılarını elde etmek için Except metodu kullanılmıştır.
Except metodu koleksiyonlarda kullanılan bir metot olup, ilk koleksiyonda yer alan ve ikinci koleksiyonda bulunmayan öğeleri bulmak için kullanılır. Except metodu ile iki farklı koleksiyon arasındaki farklı öğeler belirlenir ve bu öğeler yeni bir koleksiyon olarak oluşturulur. Bu yöntem, birden fazla liste arasındaki farklı öğeleri tespit etmek ve filtrelemek için sıklıkla kullanılır.
Açıklama:
Except metodu, iki ayrı koleksiyonda ortak olan elemanları ayırmak için kullanılır. Kod örneğimizde sayilar1 ve sayilar2 dizilerinde ortak olan sayılar 3, 4 ve 5'tir. Except metodu sayilar1 dizisinde bulunan bu sayıları çıkardığı zaman yeni bir dizi oluşturur ve bu dizi yalnızca 1 ve 2 sayılarını içerir. Yani farkliSayilar dizisi, sayilar2 dizisinde olup sayilar1 dizisinde olmayan 6 ve 7 sayılarını içermemektedir.