Aracılığıyla paylaş


Temel Sorgu İşlemleri (Visual Basic)

Bu konu, Visual Basic'teki Language-Integrated Sorgu (LINQ) ifadelerine ve sorguda gerçekleştirdiğiniz tipik işlem türlerinden bazılarına kısa bir giriş sağlar. Daha fazla bilgi için aşağıdaki konulara bakın:

Visual Basic'da LINQ'e Giriş

Arama Sorguları

İzlenecek yol: Visual Basic'te Sorgu Yazma

Veri Kaynağını Belirtme (Kaynak)

LINQ sorgusunda ilk adım, sorgulamak istediğiniz veri kaynağını belirtmektir. Bu nedenle, sorgudaki From yan tümcesi her zaman önce gelir. Sorgu işleçleri, kaynağın türüne göre sonucu seçer ve şekillendirer.

Dim query = From cust In customers
'           ...

From yan tümcesi, veri kaynağını, customersve bir aralık değişkeninicust belirtir. Aralık değişkeni bir döngü yineleme değişkeni gibidir, ancak sorgu ifadesinde gerçek yineleme gerçekleşmez. Sorgu yürütüldüğünde, genellikle bir For Each döngü kullanılarak, aralık değişkeni customers içindeki ardışık her öğeye referans görevi görür. Derleyici cust türünü çıkartabildiğinden, bunu açıkça belirtmeniz gerekmez. Açık yazma ile ve yazmadan yazılmış sorgu örnekleri için bkz. Sorgu İşlemlerinde Tür İlişkileri (Visual Basic).

Visual Basic'te yan tümcesinin From nasıl kullanılacağı hakkında daha fazla bilgi için bkz. From Yan Tümcesi.

Verileri Filtreleme (Nerede)

Büyük olasılıkla en yaygın sorgu işlemi Boole ifadesi biçiminde bir filtre uygulamaktır. Sorgu daha sonra yalnızca ifadenin doğru olduğu öğeleri döndürür. Where bir yan tümce filtreleme gerçekleştirmek için kullanılır. Filtre, veri kaynağındaki hangi öğelerin sonuçta elde edilen diziye ekleneceği belirtir. Aşağıdaki örnekte, yalnızca Londra'da adresi olan müşteriler dahil edilir.

Dim londonCusts = From cust In customers
                  Where cust.City = "London"
'                 ...

Filtre ifadelerini bir And yan tümcesi içinde birleştirmek için Or ve Where gibi mantıksal işleçleri kullanabilirsiniz. Örneğin, yalnızca Londra'dan gelen ve adı Devon olan müşterileri döndürmek için aşağıdaki kodu kullanın:

Where cust.City = "London" And cust.Name = "Devon"

Londra veya Paris'ten müşteri döndürmek için aşağıdaki kodu kullanın:

Where cust.City = "London" Or cust.City = "Paris"

Visual Basic'te Where yan tümcesini kullanma hakkında daha fazla bilgi için bkz Where Yan Tümcesi.

Verileri Sıralama (Sırala)

Döndürülen verileri belirli bir düzende sıralamak genellikle kullanışlıdır. Order By yan tümcesi, döndürülen dizideki öğelerin belirtilen alan veya alanlarda sıralanmasına neden olur. Örneğin, aşağıdaki sorgu sonuçları özelliğine Name göre sıralar. Bir Name dize olduğundan, döndürülen veriler A'dan Z'ye alfabetik olarak sıralanır.

Dim londonCusts1 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
'                   ...

Sonuçları ters sırada sıralamak için Z'den A'ya yan tümcesini Order By...Descending kullanın. Varsayılan değer, Ascending veya Ascending belirtilmediğinde Descending'dir.

Visual Basic'te Order By koşulunu kullanma hakkında daha fazla bilgi için bkz. Order By Koşulu.

Veri Seçimi (Seç)

Select yan tümcesi, döndürülen öğelerin biçimini ve içeriğini belirtir. Örneğin, sonuçlarınızın tam Customer nesnelerden mi, yalnızca bir özellikten Customer mi, özelliklerin bir alt kümesinden mi, çeşitli veri kaynaklarından gelen özelliklerin birleşiminden mi yoksa hesaplamaya dayalı yeni bir sonuç türünden mi oluşacağını belirtebilirsiniz. Select yan tümcesi kaynak öğenin bir kopyası dışında bir şey ürettiğinde, işleme projeksiyon adı verilir.

Tam Customer nesnelerden oluşan bir koleksiyonu almak için aralık değişkeninin kendisini seçin:

Dim londonCusts2 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust

Eğer bir Customer örneği, birçok alanı olan büyük bir nesneyse ve almak istediğiniz tek şey ad ise, aşağıdaki örnekte gösterildiği gibi cust.Name öğesini seçebilirsiniz. Yerel tür çıkarımı, bunun sonuç türünü bir nesne koleksiyonundan Customer dize koleksiyonuna değiştirdiğini algılar.

Dim londonCusts3 = From cust In customers
                   Where cust.City = "London"
                   Order By cust.Name Ascending
                   Select cust.Name

Veri kaynağından birden çok alan seçmek için iki seçeneğiniz vardır:

  • Koşul ifadesinde Select, sonuca eklemek istediğiniz alanları belirtin. Derleyici, özellikleri olarak bu alanlara sahip anonim bir tür tanımlar. Daha fazla bilgi için bkz. Anonim Türler.

    Aşağıdaki örnekte döndürülen öğeler anonim bir türün örnekleri olduğundan, kodunuzda başka bir yerde ada göre türe başvuramazsınız. Türü için derleyici tarafından belirlenen ad, normal Visual Basic kodunda geçerli olmayan karakterler içeriyor. Aşağıdaki örnekte, içinde sorgu londonCusts4 tarafından döndürülen koleksiyondaki öğeler anonim tür örnekleridir

    Dim londonCusts4 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select Name = cust.Name, Phone = cust.Phone
    
    For Each londonCust In londonCusts4
        Console.WriteLine(londonCust.Name & " " & londonCust.Phone)
    Next
    

    -veya-

  • Sonuca eklemek istediğiniz belirli alanları içeren adlandırılmış bir tür tanımlayın ve Select ifadesinde türün örneklerini oluşturup başlatın. Bu seçeneği yalnızca döndürülecekleri koleksiyonun dışında tek tek sonuçları kullanmanız gerekiyorsa veya bunları yöntem çağrılarında parametre olarak geçirmeniz gerekiyorsa kullanın. Aşağıdaki örnekteki türü IEnumerable(Of NamePhone) türüdür londonCusts5 .

    Public Class NamePhone
        Public Name As String
        Public Phone As String
        ' Additional class elements
    End Class
    
    Dim londonCusts5 = From cust In customers
                       Where cust.City = "London"
                       Order By cust.Name Ascending
                       Select New NamePhone With {.Name = cust.Name,
                                                  .Phone = cust.Phone}
    

Visual Basic'te yan tümcesini Select kullanma hakkında daha fazla bilgi için bkz. Yan Tümceyi Seçme.

Verileri Birleştirme (Birleştirme ve Grup Birleştirme)

Yan tümcesinde From birden fazla veri kaynağını çeşitli yollarla birleştirebilirsiniz. Örneğin, aşağıdaki kod iki veri kaynağı kullanır ve sonuçta her ikisinden de özellikleri örtük olarak birleştirir. Sorgu, soyadları sesli harfle başlayan öğrencileri seçer.

Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
                 Where student.Last.IndexOf(vowel) = 0
                 Select Name = student.First & " " &
                 student.Last, Initial = vowel
                 Order By Initial

For Each vName In vowelNames
    Console.WriteLine(vName.Initial & ":  " & vName.Name)
Next

Uyarı

Bu kodu , Nasıl yapılır: Öğe Listesi Oluşturma bölümünde oluşturulan öğrenci listesiyle çalıştırabilirsiniz.

Join anahtar sözcüğü, SQL'deki ile INNER JOIN eşdeğerdir. İki koleksiyondaki öğeler arasında eşleşen anahtar değerlerine göre iki koleksiyonu birleştirir. Sorgu, eşleşen anahtar değerlerine sahip koleksiyon öğelerinin tümünü veya bir bölümünü döndürür. Örneğin, aşağıdaki kod önceki örtük birleştirme eylemini yineler.

Dim vowelNames2 = From student In students
                  Join vowel In vowels
                  On student.Last(0) Equals vowel
                  Select Name = student.First & " " &
                  student.Last, Initial = vowel
                  Order By Initial

Group Join koleksiyonları sql'de olduğu gibi tek bir hiyerarşik koleksiyonda birleştirir LEFT JOIN . Daha fazla bilgi için Join Yan Tümcesi ve Grup Birleştirme Yan Tümcesi başlıklarına bakın.

Verileri Gruplandırma (Gruplama)

Sorgu sonucundaki öğeleri öğelerin bir Group By veya daha fazla alanına göre gruplandırmak için bir yan tümce ekleyebilirsiniz. Örneğin, aşağıdaki kod öğrencileri sınıf yılına göre gruplandırr.

Dim studentsByYear = From student In students
                     Select student
                     Group By year = student.Year
                     Into Classes = Group

For Each yearGroup In studentsByYear
    Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
    For Each student In yearGroup.Classes
        Console.WriteLine("   " & student.Last & ", " & student.First)
    Next
Next

Bu kodu , Nasıl yapılır: Öğe Listesi Oluşturma bölümünde oluşturulan öğrenci listesini kullanarak çalıştırırsanız, deyiminin For Each çıktısı şöyle olur:

Yıl: Junior

Tucker, Michael

Garcia, Hugo

Garcia, Debra

Tucker, Lance

Yıl: Kıdemli

Omelchenko, Svetlana

Osada, Michiko

Fakhouri, Fadi

Feng, Hanying

Adams, Terry

Yıl: Birinci sınıf

Mortensen, Sven

Garcia, Cesar

Aşağıdaki kodda gösterilen varyasyon sınıf yıllarını ve ardından her yıl içindeki öğrencileri soyadına göre sıralar.

Dim studentsByYear2 = From student In students
                      Select student
                      Order By student.Year, student.Last
                      Group By year = student.Year
                      Into Classes = Group

hakkında Group By daha fazla bilgi için bkz. Group By Tümcesi.

Ayrıca bakınız