LINQ Sorgularında GroupBy, Sum ve Aggregate Fonksiyonlarının Kullanımı

LINQ Sorgularında GroupBy, Sum ve Aggregate Fonksiyonlarının Kullanımı

LINQ, NET programlama dilinde kullanılan bir sorgulama aracıdır GroupBy, Sum ve Aggregate fonksiyonları sıkça kullanılır GroupBy fonksiyonu, verileri belirli bir kurala göre gruplamak için kullanılır Sum fonksiyonu sayısal verilerin toplamını hesaplamak için kullanılır Aggregate fonksiyonu ise birden fazla veri öğesine özel bir işlem gerçekleştirmek için kullanılır LINQ, verilerin daha ayrıntılı bir şekilde sorgulanması ve analiz edilmesine yardımcı olur

LINQ Sorgularında GroupBy, Sum ve Aggregate Fonksiyonlarının Kullanımı

LINQ, .NET programlama dilinde kullanılan bir sorgulama aracıdır ve verileri sorgulamak için sıklıkla kullanılır. GroupBy, Sum ve Aggregate fonksiyonları LINQ sorgularında oldukça önemli bir yer tutar. Bu fonksiyonlar, verilerin daha ayrıntılı bir şekilde sorgulanması ve analiz edilmesine yardımcı olur.

GroupBy fonksiyonu, verileri belirli bir kurala göre gruplamak için kullanılır. Örneğin, bir müşteri listesindeki müşterilerin şehirlerine göre gruplandığını düşünelim. GroupBy fonksiyonu, müşterileri şehirlerine göre gruplar ve sonuç olarak, örneğin İstanbul'da 50 müşteri olduğu gibi bir sonuç döndürür. Sum fonksiyonu ise sayısal verilerin toplamını hesaplamak için kullanılır. İşletmenin toplam gelirini ya da alacaklarını hesaplamak için Sum fonksiyonu oldukça kullanışlı bir araçtır. Son olarak, Aggregate fonksiyonu, birden fazla veri öğesine uygulanabilecek özel bir işlemi gerçekleştirmek için kullanılır. Çarpma veya toplama işlemleri gibi matematiksel işlemler gibi örnekler verilebilir.


GroupBy Fonksiyonu

GroupBy fonksiyonu, LINQ sorgularında verileri önceden tanımlanmış bir özellik ya da özelliklerine göre gruplandırmak için kullanılır. Bu işlem sonucunda elde edilen gruplar, grup bazında işlem yapma imkanı sağlar ve verilerin daha iyi anlaşılmasına yardımcı olur.

GroupBy fonksiyonu, listeler, diziler, koleksiyonlar ve veritabanları dahil olmak üzere birçok veri kaynağından gruplamaya izin verir. Örneğin, bir müşteri veri tabanındaki tüm müşterileri ülkelerine göre gruplamak istediğimizi varsayalım. Bu durumda, GroupBy fonksiyonu ile veriler gruplandırılabilir ve her bir grubun içinde ilgili ülkeye ait müşterilere erişilebilir.

Örneğin, aşağıdaki kod örneği, bir liste içindeki öğeleri fiyatlarına göre gruplandırmaktadır:

// Örnek Kod:List<Product> products = GetProducts();var groupedProducts = products.GroupBy(p => p.Price);foreach (var group in groupedProducts){	Console.WriteLine("Fiyat: " + group.Key);	foreach (var item in group)	{		Console.WriteLine("\t" + item.Name);	}}

Yukarıdaki kod örneği, ürün listesi içindeki öğeleri fiyatlarına göre gruplandırır ve her bir grup için bir fiyat gösterir. Ardından, her bir grubun altındaki öğeler gösterilir.

GroupBy fonksiyonu ile tanımlanmış bir özellik üzerinde gruplama işlemi yapılır. Eğer özellik bir dizi veya liste değilse, öz niteliği üzerinde işlem yapmak için Linq kullanılabilir. Örneğin, bir nesne listesindeki öğeleri bir özellikleri üzerinde gruplamak istediğimizi düşünelim. Bu durumda, GroupBy fonksiyonu ile özellik belirtilir ve nesneler belirtilen özelliklerine göre gruplandırılır.


Sum Fonksiyonu

Sum fonksiyonu, belirli bir veri kümesindeki tüm sayıların toplamını hesaplamak için kullanılan bir LINQ fonksiyonudur. Bu fonksiyon cümlesinde belirtilen amaçla birlikte verileri gruplandırabilir ve toplayabilir.

Sum fonksiyonunun kullanımı oldukça basittir. İlk olarak, sum fonksiyonu kullanılmak istenen veri kümesine uygulanmalıdır. Daha sonra, toplamı alınacak sayısal değer seçilmelidir. İşlem sonucunda, veri kümesindeki tüm sayıların toplamı hesaplanır ve sonuç LINQ sorgusunun bir parçası olarak alınır.

Örneğin, bir mağazanın günlük gelirlerini hesaplamak istediğinizi düşünelim. Mağazanın müşteri verilerinin bulunduğu bir veri tabanı var ve müşterilerin her satın alma işlemi veritabanına kaydediliyor. Sum fonksiyonu kullanarak, mağazanın günlük toplam satışlarını hesaplayabilirsiniz.

Müşteri İsmi Satış Tutarı
Ahmet 14.50 TL
Ali 23.70 TL
Ayşe 18.90 TL

Bu tabloya benzer bir veri kümesine sahipseniz, sum fonksiyonu kullanarak bu satışların toplamını hesaplayabilirsiniz. Bunun için, veri kümesine uygulayacağınız sum fonksiyonunu aşağıdaki gibi kullanabilirsiniz:

var toplamSatis = satislar.Sum(s => s.SatisTutari);Console.WriteLine("Günlük toplam satışlar: " + toplamSatis + " TL");

Burada, sorgunun sonucu "Günlük toplam satışlar: 57.10 TL" şeklinde olacaktır.


Örnek Kod: Toplam Sayı

Sum fonksiyonu, LINQ sorgularında sıklıkla kullanılan bir fonksiyondur. Bu fonksiyon, bir koleksiyonda bulunan sayıların toplamını hesaplamak için kullanılır. Örnek bir kullanım senaryosu ise bir mağazanın günlük satışlarının toplamını hesaplamaktır.

Toplam sayıları hesaplamak için Sum fonksiyonu aşağıdaki şekilde kullanılabilir:

Kod Parçası Açıklama
int[] numbers = {10, 20, 30, 40, 50}; Koleksiyon oluşturulur.
int sum = numbers.Sum(); Sum fonksiyonu kullanarak sayıların toplamı hesaplanır.
Console.WriteLine("Toplam: " + sum); Toplam ekrana yazdırılır.

Yukarıdaki kod parçasında, bir sayı koleksiyonu oluşturuldu ve Sum fonksiyonu kullanılarak sayıların toplamı hesaplandı. Sonuç olarak, "Toplam: 150" yazısı ekranda görüntülendi.

Sum fonksiyonu ayrıca, belirli bir koşulu sağlayan sayıların toplamını hesaplamak için de kullanılabilir. Örneğin, belirli bir minimum değeri olan sayıların toplamı hesaplanabilir:

Kod Parçası Açıklama
int[] numbers = {10, 20, 30, 40, 50}; Koleksiyon oluşturulur.
int min = 30; Minimum değer belirlenir.
int sum = numbers.Where(n => n >= min).Sum(); Where fonksiyonu ile koşullu seçim yapılır ve Sum fonksiyonu ile sayıların toplamı hesaplanır.
Console.WriteLine("Toplam: " + sum); Toplam ekrana yazdırılır.

Yukarıdaki kod parçasında, sayı koleksiyonunda sadece 30 veya daha büyük olan sayıların toplamı hesaplanıyor. Sonuç olarak, "Toplam: 120" yazısı ekranda görüntülendi.

Sum fonksiyonunun, LINQ sorgularında sayı toplamı hesaplama işlemi için oldukça kullanışlı bir fonksiyon olduğu görülmektedir.


Kod Örneği: Toplam Alacak

LINQ sorgularında Sum fonksiyonu, bir grup içindeki değerlerin toplamını hesaplar. Bu örnek kodda, "müşteriler" adlı bir sınıf listesi oluşturuyoruz. Her müşteri nesnesi, ad, soyad, bakiye, tahsilat ve ödemelerin listelerini içerir.

Aşağıdaki kod örneği, müşteriler listesi içindeki alacakların toplamını bulmak için Sum fonksiyonunu kullanmaktadır. Toplam alacak, "alacaklar" adlı bir liste içinde depolanır. Alphabetic sıralamaya göre müşterileri gruplandırdıktan sonra, Sum fonksiyonu her gruptaki alacakları toplar ve toplam alacakları "alacaklar" listesine ekler.

List<Musteri> musteriler = GetMusteriler();List<decimal> alacaklar = new List<decimal>();var grupluMusteriler = from m in musteriler                       group m by m.Soyad.Substring(0, 1) into mGroup                       orderby mGroup.Key                       select mGroup;foreach (var grup in grupluMusteriler){    decimal toplamAlacak = grup.Sum(m => m.Alacak);    alacaklar.Add(toplamAlacak);}

Kod Örneği: Toplam Gelir

Bir veritabanındaki toplam gelir miktarını LINQ sorguları kullanarak hesaplamak oldukça kolaydır. Bunun için Sum fonksiyonu kullanılabilir. Bu örnekte, öncelikle veritabanından gelen veriler bir diziye atılır. Daha sonra Sum fonksiyonu kullanılarak toplam gelir hesaplanır.

Adı Tarih Gelir
Ahmet 02.01.2022 1000
Mehmet 05.01.2022 2000
Ayşe 10.01.2022 1500

Aşağıdaki kod örneği, yukarıdaki tablodaki gelirleri toplamak için kullanılabilir:

int[] gelirler = { 1000, 2000, 1500 };int toplamGelir = gelirler.Sum();Console.WriteLine("Toplam Gelir: " + toplamGelir);

Yukarıdaki kodda, gelirler adlı bir dizi oluşturulmuş ve her bir veri satırındaki gelirler bu diziye eklenmiştir. Daha sonra, Sum() fonksiyonu kullanılarak toplam gelir hesaplanmış ve sonuç bir değişkene atılmıştır. Son olarak, Console.WriteLine() fonksiyonu kullanılarak toplam gelir yazdırılmıştır.

Bu şekilde, LINQ sorgularındaki Sum fonksiyonu kullanılarak veritabanındaki toplam gelir miktarı çok kısa bir kod kullanılarak hesaplanabilir.


Örnek Kod: Ortalama

LINQ sorgularında, ortalama değer hesaplamak için kullanılan Average fonksiyonu oldukça kullanışlıdır. Bu fonksiyon, sorgulanan verilerin ortalamasını almak için kullanılır ve bir sayı dizisinde yer alan sayıların ortalaması gibi işlemlerde oldukça faydalıdır. Örnek bir kod kullanarak Average fonksiyonu nasıl kullanılabilir hakkında bilgi edinebiliriz.

Aşağıdaki örnek kod, bir sayı dizisindeki sayıların ortalamasını hesaplar:

Sayılar
3
5
7
9
11
int[] sayilar = {3, 5, 7, 9, 11};double ortalama = sayilar.Average();Console.WriteLine("Sayıların Ortalaması: " + ortalama);

Yukarıdaki kod çalıştırıldığında, ortalama değer olan 7.0 yazdırılır.

Bu örnek, Average fonksiyonunun dizilerde kullanımını göstermek için yalnızca bir örnek olarak kabul edilebilir. Kod, farklı veri türleri ve farklı parametreler dahil olmak üzere birçok senaryoda kullanılabilir.


Aggregate Fonksiyonu

Aggregate fonksiyonu, bir dizi üzerinde belirtilen bir işleve dayalı bir sonuç döndüren bir LINQ sorgusu işlemidir. Bu fonksiyonla, bir dizi üzerinde farklı işlemler gerçekleştirebilirsiniz. Örneğin, bir dizi sayı değerleri için toplama, çarpma, en büyük veya en küçük değer bulma işlemleri yapılabilir.

Aggregate fonksiyonu, iki parametre alır: işlev ve bir başlangıç değeri. İşlev parametresi, belirli bir işlemi tanımlayan bir lambda ifadesidir. Başlangıç değeri parametresi, işlem başlamadan önce kullanılacak değeri belirler. İşlev belirtilen işlemi uygulayarak sonuca ulaşır. İşlemler arasında bir sonraki adıma başlamadan önce hesaplanan değer, bir sonraki adımda işlemin başlangıç değeri olarak kullanılır.

Aşağıda, Aggregate fonksiyonunun kullanımına dair iki örnek gösterilmiştir. İlk örnekte, bir dizideki en uzun kelimeyi bulmak için Aggregate fonksiyonu kullanılmıştır. İkinci örnekte ise bir dizideki sayıların en büyüğünü bulmak için Aggregate fonksiyonu kullanılmıştır.

Örnek Kod: En Uzun Kelime Örnek Kod: En Büyük Sayı
string[] kelimeler = { "elma", "armut", "portakal", "üzüm" };string enUzunKelime = kelimeler.Aggregate((kelime1, kelime2) => kelime1.Length > kelime2.Length ? kelime1 : kelime2);
int[] sayilar = { 2, 5, 8, 1, 3 };int enBuyukSayi = sayilar.Aggregate((sayi1, sayi2) => sayi1 > sayi2 ? sayi1 : sayi2);

Yukarıdaki kod örneklerinde, Aggregate fonksiyonu bir lambda ifadesi ile birlikte kullanılmıştır. İlk örnekte, lambda ifadesi, karşılaştırılan iki kelimenin uzunluklarını karşılaştırır ve daha uzun kelimeyi seçer. İkinci örnekte ise lambda ifadesi, karşılaştırılan iki sayıyı karşılaştırır ve daha büyük olan sayıyı seçer.


Örnek Kod: İlk ve Son Tarih Arasındaki Fark

Aggregate fonksiyonu, LINQ sorguları ile çalışırken oldukça kullanışlıdır. Bu örnekte, Aggregate fonksiyonunun İlk ve Son Tarih Arasındaki Fark örneği ele alınacaktır.

Aşağıdaki kod örneği, bir tarihin daha küçük bir tarihten nasıl çıkarılabileceğini göstermektedir.

Tarih
01.01.2022
01.02.2022
01.03.2022
01.04.2022
01.05.2022

Yukarıdaki tabloda, her bir 'tarih' verisi belirtilmiştir. Aggregate fonksiyonunu kullanarak ilk tarihi seçip, son tarihten farkı hesaplayabilirsiniz. Aşağıdaki örnek kodda gösterildiği gibi:

DateTime[] tarihler = new DateTime[] { new DateTime(2022, 1, 1), new DateTime(2022, 2, 1), new DateTime(2022, 3, 1), new DateTime(2022, 4, 1), new DateTime(2022, 5, 1) };            TimeSpan fark = tarihler.Aggregate((t1, t2) => t2 - t1);Console.WriteLine(" İlk ve Son Tarih arasındaki fark: " + fark.Days + " gün");

Bu kod örneği, öncelikle tarihlerin bir dizi olarak tanımlayarak başlar. Sonra, Aggregate fonksiyonu kullanılarak, ilk tarih seçilir ve diğer tarihlerden çıkarılır. Bu, TimeSpan tipinde bir 'fark' değişkeninde saklanır. En son, farkın nasıl alınacağı anlaşılır ve sonucu konsola yazdırılır.

Bu örnek kod, Aggregate fonksiyonunun LINQ sorgularındaki kullanımını anlatan önemli bir örnektir. Aggregate fonksiyonunun tarih işlemleri gibi daha karmaşık senaryolarda da kullanılabileceği unutulmamalıdır.


Örnek Kod: Çarpma

Aggregate fonksiyonu, bir dizi üzerinde yinelendiğinde, belirtilen işlemleri uygulamak için kullanılır. Çarpma işlemi de bu fonksiyon ile gerçekleştirilebilir.

Bir örnek üzerinden açıklayacak olursak, diyelim ki elimizde bir sayı dizisi var ve bu dizideki tüm elemanlar çarpılacak. Bunun için Aggregate fonksiyonunu kullanabiliriz. Önce, bir sayı dizisi oluşturalım.

Sayı
2
5
3
4

Bu dizideki tüm elemanları çarpmak için Aggregate fonksiyonunu kullanabiliriz. Kodumuz şu şekilde olacaktır:

int[] sayilar = new int[] { 2, 5, 3, 4 };int carpim = sayilar.Aggregate((x, y) => x * y);

Bu kod, sayilar dizisindeki tüm elemanları çarpacak ve sonucu carpim değişkenine atayacaktır. Sonuç olarak, carpim değişkeninin değeri 120 olacaktır.

Aggregate fonksiyonu, bir dizinin elemanlarını istediğiniz şekilde işleyebilmeniz için oldukça kullanışlı bir fonksiyondur. Bu örnekte gösterdiğimiz gibi, çarpma işlemi gibi farklı işlemleri gerçekleştirmek için kullanabilirsiniz.


Sonuç

Bu yazımızda LINQ sorgularında GroupBy, Sum ve Aggregate fonksiyonlarının önemli olduğunu ve farklı senaryolarda nasıl kullanılabileceğini inceledik. GroupBy fonksiyonu, verilerin gruplandırılmasını sağlarken Sum fonksiyonu, toplama işlemleri için kullanılabilmektedir. Ayrıca Sum fonksiyonu, toplam sayıları ve miktarları hesaplamak için kullanılabileceği gibi Average fonksiyonu ile ortalama hesaplamalar da yapılabilmektedir.

Aggregate fonksiyonu ise, toplam sayıların, çarpımı veya ortalama gibi işlemlerin yapılmasında kullanılabilmektedir. Bu fonksiyon, tarih hesaplamaları ve birden fazla veri seti üzerinde işlemler yapmak için de kullanılabilmektedir.

Sonuç olarak, LINQ sorgularında GroupBy, Sum ve Aggregate fonksiyonlarının kullanımı oldukça esnek ve güçlüdür. Bu fonksiyonlar, verilerin gruplandırılması, filtrelenmesi ve işlemlerin yapılması için kullanılabilmektedir. Bu nedenle, LINQ sorgularında bu fonksiyonları verimli bir şekilde kullanmak, yazılım geliştirme sürecinde büyük bir kolaylık sağlayacaktır.