Aracılığıyla paylaş


Temel Sorgu İşlemleri (Visual Basic)

Bu konu, Visual Basic'teki Dil Tümleşik 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 edinmek için aşağıdaki kaynaklara bakın:

Visual Basic'te LINQ'e Giriş

Sorgular

İzlenecek yol: Visual Basic'te Sorgu Yazma

Veri Kaynağını (Kimden) Belirtme

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ülürken, genellikle bir For Each döngü kullanılarak, aralık değişkeni içindeki customersardışık her öğeye bir başvuru işlevi görür. Derleyici türü custçıkarabildiğinden 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.

Veri Filtreleme (Yeri)

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 Filtrelemeyi gerçekleştirmek için bir yan tümcesi 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"
'                 ...

bir yan tümcedeki Where filtre ifadelerini birleştirmek için ve Or gibi And mantıksal işleçler 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 yan tümcesini Where kullanma hakkında daha fazla bilgi için bkz . Where Yan Tümcesi.

Veri Sıralama (Sıralama Ölçütü)

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 belirtilmediğinde Ascending veya Descending belirtilmediğindedir.

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

Verileri Seçme (Seçim)

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

Örnek Customer , birçok alanı olan büyük bir nesneyse ve tek almak istediğiniz ad ise, aşağıdaki örnekte gösterildiği gibi öğesini seçebilirsiniz cust.Name. 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:

  • yan tümcesinde Select , sonuce 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-

  • Sonucuna eklemek istediğiniz belirli alanları içeren adlandırılmış bir tür tanımlayın ve yan tümcesinde Select türün örneklerini oluşturun ve 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ülondonCusts5: IEnumerable(Of Name Telefon).

    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.

Veri Katma (Katma ve Grup Katma)

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

Not

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 bkz . Join Yan Tümcesi ve Grup Birleştirme Yan Tümcesi.

Verileri Gruplandırma (Gruplandırma Ölçütü)

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

Gümüş, Meltem

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 Bydaha fazla bilgi için bkz . Group By Yan Tümcesi.

Ayrıca bkz.