Ana içeriğe atla

LINQ ile In-Memory Sorguların Çalıştırılması – Bölüm II

İlk makalemizde LINQ’ya genel bir giriş yapmıştık. Bu makalede, memory’de bulunan collectionlarda nasıl sorgulamalar yapılabilir, ne tür fonksiyonlar kullanılabilir gibi konulara değineceğiz. Kodlama geliştirme yaparken kullandığımız IEnumerable interfacelerinden gelen collection yapısında olan tüm nesnelerde Linq kullanarak sorgulamalar yapabiliriz. Hatta collection içerisinden max, min, avarage vs.. gibi çoğu fonksiyonları kullanabiliriz. Linq’dan önce sorgulama işlemlerimizi döngüler yardımı ile yapabiliyorduk, linq ile beraber tek satırda tüm bu sorgulamaları yapma imkanına sahip olduk. Kısa örnekler ile nasıl kullanılabildiklerine bakalım.
  • Average: Sayısal objectler üzerinde ortalama almak için kullanılır. Decimal değer döndürür.
  • All: Collection içerisindekilerin tümü verilen bir kritere uyup uymadığını kontrol eder ve sonuç olarak true yada false döndürür.
  • Any: Collection içerisindekilerin en az birinin verilen bir kritere uyup uymadığını kontrol eder ve sonuç olarak true yada false döndürür.
  • Concat: İki collection’ı birleştirir ve geriye birleşmiş olacn collection döner.
  • Contains: Collection içerisinde belirtilen object içeriyor mu diye arar, eğer içeriyor ise true içermiyor ise false döndürür.
  • Count: Collection içerisinde bulunan object’lerin toplam sayısını döndürür.
  • Distinct: Collection içerisinde objectler eğer tekrar ediyorsa, onları tek olarak döndürür. Dönen collection içerisinde tekrar eden object bulunmaz.
  • ElementAt: Parametre olarak index alır ve verilen index’e karşılık gelen object’i döndürür.
  • ElementAtOrDefault: Parametre olarak index alır ve verilen index’e karşılık gelen object’i döndürür. Eğer verilen index’te bir object yok ise onun default değerini döndürür. Örneğin sayılardan oluşan collection içerisinde default 0 döner, objectlerde ise nothing döndürür.
  • Except: Parametre olrak verilen ikinci collection’da bulunan objectlerin dışındaki objectleri döndürür.
  • First: Collection’da bulunan ilk object’ti döndürür.
  • FirstOrDefault: Collection’da bulunan ilk object’ti döndürür. Eğer object yok ise default olarak nothing döndürür yada parametre olarak default döndürülmesi gereken değer verilebilir.
  • GroupBy: Collection içerisinde verilen bir değere göre grouplar.
  • Intersect: iki collection içerisinde de bulunan değerleri yani kesişimini döndürür.
  • Join: İki collection’ı bir eşitlik değeri ile aralarında bağlantı kurar.
  • Last: Collection’da bulunan en sonki object’ti döndürür.
  • LastOrDefault: Collection’da bulunan en sonki object’ti döndürür. Eğer object yok ise default olarak nothing döndürür yada parametre olarak default döndürülmesi gereken değer verilebilir.
  • Max: Sayısal collection içerisinde en büyük değere ship olanı döndürür.
  • Min: Sayısal collection içerisinde en küçük değere ship olanı döndürür.
  • OrderByDescending: Verilen kritere göre colelction’ı büyükten küçüğe doğru sıralar
  • OrderBy: Verilen kritere göre colelction’ı küçükten büyüğe doğru sıralar
  • Reverse: Verilen kritere göre colelction’ı tersine döndürür.
  • Skip: Collection içerisinden parametre olarak verilen indexten sonrasını döndürür.
  • Sum: Sayısal collection’ın toplam değerini döndürür.
  • Take: Collection içerisinden parametre olarak verilen indexe kadar olanı döndürür.
  • TakeWhile: Collection içerisinden verilen kritere uyan olan değerleri döndürür. Kritere uymayan il değerde işlem durdurulur.
  • Union: İki collectionı birleştirir.
  • Where: Verilen kritere uygun olan değerleri döndürür.
Örnek uygulama aşağıdaki gibidir;
Public Class frmLINQ2
   Dim objMemoryObject As Decimal() = New Decimal() 
             {1.34, 3.98, 2.98, 3.78
  
Dim objObjComp As clsComputer() = New clsComputer() 
             {New clsComputer("Toshiba", 23, 3), New clsComputer("HP", 23, 1)}
    Private Sub Islem_Click
      (ByVal sender As System.Object, ByVal e As System.EventArgs)
                                               Handles Islem.Click
        Try
            Dim objAvarage = objMemoryObject.Average()
            Dim objAll = objMemoryObject.All(Function(sayi) sayi > 2)
            Dim objAny = objMemoryObject.Any(Function(sayi) sayi > 2)
            Dim objConcat = objMemoryObject.Concat(New Decimal() {4.0, 5.67})
            Dim objContains = objMemoryObject.Contains(3.98)
            Dim objCount = objMemoryObject.Count()
            Dim objDistinct = objMemoryObject.Distinct()
            Dim objElementAt = objMemoryObject.ElementAt(2)
            Dim objElementAtOrDefault = objMemoryObject.ElementAtOrDefault(5)
            Dim objObjectElementAtOrDefault = objObjComp.ElementAtOrDefault(1)
            objObjectElementAtOrDefault = objObjComp.ElementAtOrDefault(4)
            Dim objExcept = objMemoryObject.Except(New Decimal() {3.98})
            Dim objFirst = objMemoryObject.First()
            Dim objGroupBy = objObjComp.GroupBy
                                         (Function(c) c.CPUSpeed)

            Dim objLast = objMemoryObject.Last()
            Dim objMax = objMemoryObject.Max()
            Dim objMin = objMemoryObject.Min()
            Dim objOrederByDescending = objMemoryObject.OrderByDescending
                                        
(Function(v) v).ToList() 

            Dim objOrederBy = objMemoryObject.OrderBy(Function(v) v).ToList()
            Dim objReverse = objMemoryObject.Reverse().ToList()
            Dim objSkip = objMemoryObject.Skip(2).ToList()
            Dim objSkipWhile = objMemoryObject.SkipWhile
                                         (Function(d) d < 2).ToList()
            Dim objSum = objMemoryObject.Sum()
            Dim objTake = objMemoryObject.Take(3).ToList()
            Dim objTakeWhile = objMemoryObject.TakeWhile
                                         (Function(d) d < 2).ToList()
            Dim objUnion = objMemoryObject.Union
                                         (New Decimal() {5.66, 3.77}).ToList()
            Dim objWhere = objMemoryObject.Where(Function(d) d > 2).ToList()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
    End Sub 
 
End Class
Örnek 1. LINQ fonksiyon örnekleri
Kaynak kod indir
Armağan DÖKER

Yorumlar

Bu blogdaki popüler yayınlar

UML ve Modelleme – Bölüm 4 (Class (Sınıf) Diyagramları)

Bir önceki makalemizde UML modellemede kullanılan ilk diyagram olan Use Case diyagramını incelemiştik. Bu makalemizde nesne tabanlı programlamada kullanılan sınıflar ve sınıfların arasındaki ilişkileri modelleyebileceğimiz diyagramlar olan Class(Sınıf) diyagramlarını inceleyeceğiz. UML’de sınıflar, nesne tabanlı programlama mantığı ile tasarlanmıştır. Sınıf diyagramının amacı bir model içerisinde sınıfların tasvir edilmesidir. Nesne tabanlı uygulamada, sınıfların kendi özellikleri (üye değişkenler), işlevleri (üye fonksiyonlar) ve diğer sınıflarla ilişkileri bulunmaktadır. UML’de sınıf diyagramlarının genel gösterimi aşağıdaki gibidir. Şekil 1. Class Diyagram Şekil1’de görüldüğü üzere bir dikdörtgeni 3 parçaya bölüyoruz. En üst bölüm sınıf adını, orta kısım özellik listesini (üye değişkenler) ve en son kısım, işlev listesini (üye fonksiyonlar) göstermektedir. Çoğu diyagramlarda alt iki bölüm çıkarılır. Genelde tüm özellik ve işlevler gösterilmemektedir. Ama

Yazılım Maliyet Tahmineleme Tecrübeleri

Yazılım mühendisliğinde maliyet hesabı her zaman problem olmuştur. "Bu iş kaç Adam/Gün tutar?" sorusuyla sıkça karşılaşıyoruz. Adam/gün veya Adam/ay ölçütleri bir kaynağın/kişinin belirtilen zaman dilimindeki iş gücü anlamına gelir. Tabi bu noktada yine kafa karışıklıkları başlar. 6 A/G'lik bir işi hızlandıralım diye 2 kişi ile yapmaya çalışsak ve kaynak/kod, modül, altyapı, insan vb. her bir şeyi bir kenara bıraksak, matematiksel basit formülle 6/2=3 A/G'de biter? Gerçek hayat böyle değil, öncelikle bunu anlamamız lazım. Hep şu örnek verilir; "Aynı bebeği 2 kadın birlikte daha kısa sürede doğurur mu?" Eğer bunun cevabı "Evet" ise (veya bir gün böyle bir durum ortaya çıkarsa), yazımı değiştirmem gerekecek:) Mevzu gerçekten derin...Maliyet hesabı; bulunduğunuz firmanın yazılım süreçlerini hangi methodlarla uyguladığına, ilgili işin o dönemdeki aciliyetine, (şirket yönetiminin baskısına:)) vb. bir çok duruma bağlı olabilir. Örneğin; bizim firmada e

UML ve Modelleme – Bölüm 3 (Use Case Diyagramlar)

Önceki iki makalemizde ( 1 , 2 ) UML’e genel olarak değinip ve modellemede kullanacağımız dokuz diyagram hakkında bilgiler vermiştik. Bu makalemizde Use Case diyagramından detaylı bahsedeceğiz. Öncelikle, genel Use case diyagramının tanımını hatırlayalım. “Bir kullanıcı ve bir sistem arasındaki etkileşimi anlatan senaryo topluluğudur.” Ivar Jacobson Senaryo tanımı için der ki: “Aktörle sistem arasında gerçekleştirilen, sonucunda aktöre farkedilir getirisi/ faydası oluşan etkileşimli diyalogdur. ” UML Use Case Diyagramları  sistemin işlevselliğini açıklamak amacıyla kullanılır. Sistemin birbirinden ayrı özelliklerinin detaylarını göstermekten ziyade, Use Case Diyagramlar, tüm mevcut işlevselliği göstermek için kullanılabilir. Buradaki en önemli noktalardan biri,   Use Case Diyagramlar temelde sequence diyagram ve akış diyagramlarından farklıdır. Use Case diyagramlar dört ana elemandan oluşmaktadır. Aktörler , Sistem (Proje kapsamını belirtir) , Use Caseler ve bunlar ara