İzlenecek Yol: Visual Basic'de Sorgu Yazma

Bu kılavuzda, Visual Basic dil özelliklerini kullanarak Dil Tümleşik Sorgu (LINQ) sorgu ifadelerini nasıl yazabileceğiniz gösterilmektedir. İzlenecek yol, Student nesneleri listesinde sorgu oluşturmayı, sorguları çalıştırmayı ve bunları nasıl değiştirebileceğinizi gösterir. Sorgular nesne başlatıcılar, yerel tür çıkarımı ve anonim türler gibi çeşitli özellikler içerir.

Bu kılavuzu tamamladıktan sonra, ilgilendiğiniz belirli LINQ sağlayıcısı için örneklere ve belgelere geçmeye hazır olacaksınız. LINQ sağlayıcıları LINQ to SQL, LINQ to DataSet ve LINQ to XML içerir.

Proje Oluşturma

Konsol uygulama projesi oluşturmak için

  1. Visual Studio’yu çalıştırın.

  2. Dosya menüsünde Yeni'nin üzerine gelin ve Proje'ye tıklayın.

  3. Yüklü Şablonlar listesinde Visual Basic'e tıklayın.

  4. Proje türleri listesinde Konsol Uygulaması'na tıklayın. Ad kutusuna proje için bir ad yazın ve Tamam'a tıklayın.

    Bir proje oluşturulur. Varsayılan olarak, System.Core.dll bir başvuru içerir. Ayrıca, Başvurular Sayfasındaki İçeri Aktarılan ad alanları listesi, Project Tasarım Aracı (Visual Basic) ad alanını System.Linq içerir.

  5. Derleme Sayfası, Project Tasarım Aracı (Visual Basic)'nde Option çıkar seçeneğinin Açık olarak ayarlandığından emin olun.

Bellek İçi Veri Kaynağı ekleme

Bu kılavuzdaki sorguların veri kaynağı nesnelerin listesidir Student . Her Student nesne bir ad, soyadı, bir sınıf yılı ve öğrenci gövdesinde akademik bir derece içerir.

Veri kaynağını eklemek için

  • Bir Student sınıf tanımlayın ve sınıfın örneklerinin listesini oluşturun.

    Önemli

    Sınıfı tanımlamak Student ve izlenecek yol örneklerinde kullanılan listeyi oluşturmak için gereken kod, Nasıl yapılır: Öğe Listesi Oluşturma bölümünde sağlanır. Buradan kopyalayıp projenize yapıştırabilirsiniz. Yeni kod, projeyi oluştururken görüntülenen kodun yerini alır.

Öğrenciler listesine yeni bir öğrenci eklemek için

Sorgu Oluşturma

Bu bölümde eklenen sorgu yürütülürken, akademik dereceleri ilk on sırada yer alan öğrencilerin listesini oluşturur. Sorgu her seferinde tam Student nesneyi seçtiğinden, sorgu sonucunun türü olur IEnumerable(Of Student). Ancak, sorgu türü genellikle sorgu tanımlarında belirtilmez. Bunun yerine, derleyici türü belirlemek için yerel tür çıkarımı kullanır. Daha fazla bilgi için bkz . Yerel Tür Çıkarımı. Sorgunun aralık değişkeni, currentStudentkaynağındaki studentsher Student örneğe başvuru görevi görür ve içindeki her nesnenin studentsözelliklerine erişim sağlar.

Basit bir sorgu oluşturmak için

  1. Projenin yönteminde Main aşağıdaki gibi işaretlenmiş yeri bulun:

    ' ****Paste query and query execution code from the walkthrough,
    ' ****or any code of your own, here in Main.
    

    Aşağıdaki kodu kopyalayın ve yapıştırın.

    Dim studentQuery = From currentStudent In students
                       Where currentStudent.Rank <= 10
                       Select currentStudent
    
  2. Derleyici tarafından atanan türün olduğunu IEnumerable(Of Student)doğrulamak için fare işaretçisini kodunuz üzerinde studentQuery bekletin.

Sorguyu çalıştır

değişkeni studentQuery sorgunun tanımını içerir, sorguyu çalıştırmanın sonuçlarını içermez. Sorgu çalıştırmaya yönelik tipik bir mekanizma bir For Each döngüdür. Döndürülen dizideki her öğeye döngü yineleme değişkeni aracılığıyla erişilir. Sorgu yürütme hakkında daha fazla bilgi için bkz . İlk LINQ Sorgunuzu Yazma.

Sorguyu çalıştırmak için

  1. Projenizdeki sorgunun altına aşağıdaki For Each döngünün eklenmesini sağlayın.

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Veri türünü görmek için fare işaretçisini döngü denetim değişkeninin studentRecord üzerinde bekletin. türü studentRecord olarak çıkarılır Student, çünkü studentQuery bir örnek koleksiyonu Student döndürür.

  3. CTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.

Sorguyu Değiştirme

Belirtilen sıradaysa sorgu sonuçlarını taramak daha kolaydır. Döndürülen sırayı kullanılabilir herhangi bir alana göre sıralayabilirsiniz.

Sonuçları sıralamak için

  1. Deyimiyle Select sorgunun Where deyimi arasına aşağıdaki Order By yan tümceyi ekleyin. Order By yan tümcesi, sonuçları her öğrencinin soyadına göre alfabetik olarak A'dan Z'ye sıralar.

    Order By currentStudent.Last Ascending
    
  2. Soyadına ve ardından adlarına göre sıralamak için her iki alanı da sorguya ekleyin:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending
    

    Ayrıca, Z'den A'ya sipariş vermek için de belirtebilirsiniz Descending .

  3. CTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.

Yerel tanımlayıcı tanıtmak için

  1. Sorgu ifadesinde yerel bir tanımlayıcı tanıtmak için bu bölümdeki kodu ekleyin. Yerel tanımlayıcı bir ara sonuç tutar. Aşağıdaki örnekte, name öğrencinin ad ve soyadlarını bir arada tutan bir tanımlayıcıdır. Yerel tanımlayıcı kolaylık sağlamak için kullanılabilir veya aksi takdirde birden çok kez hesaplanacak bir ifadenin sonuçlarını depolayarak performansı artırabilir.

    Dim studentQuery2 =
            From currentStudent In students
            Let name = currentStudent.Last & ", " & currentStudent.First
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By name Ascending
            Select currentStudent
    
    ' If you see too many results, comment out the previous
    ' For Each loop.
    For Each studentRecord In studentQuery2
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. CTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.

Select yan tümcesinde bir alan planlamak için

  1. Öğeleri kaynaktaki öğelerden farklı olan bir dizi oluşturan bir sorgu oluşturmak için bu bölümdeki sorguyu ve For Each döngüsünü ekleyin. Aşağıdaki örnekte, kaynak bir nesne koleksiyonudur Student , ancak her nesnenin yalnızca bir üyesi döndürülür: soyadı Garcia olan öğrencilerin adı. Bir currentStudent.First dize olduğundan, tarafından studentQuery3 döndürülen dizinin veri türü bir dize dizisidir IEnumerable(Of String). Önceki örneklerde olduğu gibi, derleyicinin yerel tür studentQuery3 çıkarımı kullanarak belirlemesi için için bir veri türü ataması bırakılmıştır.

    Dim studentQuery3 = From currentStudent In students
                        Where currentStudent.Last = "Garcia"
                        Select currentStudent.First
    
    ' If you see too many results, comment out the previous
    ' For Each loops.
    For Each studentRecord In studentQuery3
        Console.WriteLine(studentRecord)
    Next
    
  2. Atanan türün olduğunu IEnumerable(Of String)doğrulamak için fare işaretçisini kodunuz üzerinde studentQuery3 bekletin.

  3. CTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.

Select yan tümcesinde anonim bir tür oluşturmak için

  1. Sorgularda anonim türlerin nasıl kullanıldığını görmek için bu bölümdeki kodu ekleyin. Bunları sorgularda, kayıtların tamamı (önceki örneklerdeki kayıtlar) veya tek alanlar (currentStudentFirstönceki bölümde) yerine veri kaynağından birkaç alan döndürmek istediğinizde kullanırsınız. Sonucta eklemek istediğiniz alanları içeren yeni bir adlandırılmış tür tanımlamak yerine yan tümcesindeki Select alanları belirtirsiniz ve derleyici özellikleri olarak bu alanları içeren anonim bir tür oluşturur. Daha fazla bilgi için bkz . Anonim Türler.

    Aşağıdaki örnek, akademik dereceleri 1 ile 10 arasında olan kıdemlilerin adını ve derecesini akademik derece sırasına göre döndüren bir sorgu oluşturur. Bu örnekte, yan tümcesi anonim bir türün studentQuery4 örneğini döndürdüğünden ve anonim bir türün kullanılabilir adı olmadığından türü çıkarılmalıdır Select .

    Dim studentQuery4 =
            From currentStudent In students
            Where currentStudent.Year = "Senior" And currentStudent.Rank <= 10
            Order By currentStudent.Rank Ascending
            Select currentStudent.First, currentStudent.Last, currentStudent.Rank
    
    ' If you see too many results, comment out the previous
    ' For Each loops.
    For Each studentRecord In studentQuery4
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First &
                          ":  " & studentRecord.Rank)
    Next
    
  2. CTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.

Ek Örnekler

Temel bilgileri anladığınıza göre, LINQ sorgularının esnekliğini ve gücünü göstermek için ek örneklerin listesi aşağıda verilmiştir. Her örnek, ne yaptığının kısa bir açıklamasıyla gösterilir. Elde edilen türü görmek için fare işaretçisini her sorgunun sorgu sonuç değişkeninin üzerinde bekletin. Sonuçları üretmek için bir For Each döngü kullanın.

' Find all students who are seniors.
Dim q1 = From currentStudent In students
         Where currentStudent.Year = "Senior"
         Select currentStudent

' Write a For Each loop to execute the query.
For Each q In q1
    Console.WriteLine(q.First & " " & q.Last)
Next

' Find all students with a first name beginning with "C".
Dim q2 = From currentStudent In students
         Where currentStudent.First.StartsWith("C")
         Select currentStudent

' Find all top ranked seniors (rank < 40).
Dim q3 = From currentStudent In students
         Where currentStudent.Rank < 40 And currentStudent.Year = "Senior"
         Select currentStudent

' Find all seniors with a lower rank than a student who 
' is not a senior.
Dim q4 = From student1 In students, student2 In students
         Where student1.Year = "Senior" And student2.Year <> "Senior" And
               student1.Rank > student2.Rank
         Select student1
         Distinct

' Retrieve the full names of all students, sorted by last name.
Dim q5 = From currentStudent In students
         Order By currentStudent.Last
         Select Name = currentStudent.First & " " & currentStudent.Last

' Determine how many students are ranked in the top 20.
Dim q6 = Aggregate currentStudent In students
         Where currentStudent.Rank <= 20
         Into Count()

' Count the number of different last names in the group of students.
Dim q7 = Aggregate currentStudent In students
         Select currentStudent.Last
         Distinct
         Into Count()

' Create a list box to show the last names of students.
Dim lb As New System.Windows.Forms.ListBox
Dim q8 = From currentStudent In students
         Order By currentStudent.Last
         Select currentStudent.Last Distinct

For Each nextName As String In q8
    lb.Items.Add(nextName)
Next

' Find every process that has a lowercase "h", "l", or "d" in its name.
Dim letters() As String = {"h", "l", "d"}
Dim q9 = From proc In System.Diagnostics.Process.GetProcesses,
         letter In letters
         Where proc.ProcessName.Contains(letter)
         Select proc

For Each proc In q9
    Console.WriteLine(proc.ProcessName & ", " & proc.WorkingSet64)
Next

Ek Bilgi

Sorgularla çalışmayla ilgili temel kavramlar hakkında bilgi edindikten sonra, ilgilendiğiniz belirli linq sağlayıcısı türüne ilişkin belgeleri ve örnekleri okumaya hazırsınız:

Ayrıca bkz.