İzlenecek Yol: Visual Basic'de Sorgu Yazma

Bu kılavuzda, Sorgu (LINQ) sorgu Visual Basic yazmak için Language-Integrated dil özelliklerini nasıl kullanabileceğiniz açıklanır. Bu kılavuzda Öğrenci nesneleri listesinde sorgu oluşturma, sorguları çalıştırma ve bunları değiştirme adımlarını gösterir. Sorgular nesne başlatıcılar, yerel tür çıkarı ve anonim türler gibi çeşitli özellikleri içerir.

Bu izlenecek yolu tamamladıktan sonra, ilgilendiğiniz belirli LINQ sağlayıcısına ilişkin örneklere ve belgelere geçebilirsiniz. LINQ sağlayıcıları LINQ - SQL , LINQ to DataSet ve LINQ to XML.

Yeni bir Project

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 ardından Dosya'ya Project.

  3. Yüklü Şablonlar listesinde, Visual Basic.

  4. Proje türleri listesinde Konsol Uygulaması'ne 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, uygulamanın bir başvuru System.Core.dll. Ayrıca, Başvurular Sayfasındaki İçeri Aktarılan ad alanları listesi, Project Tasarımcısı (Visual Basic) ad alanını System.Linq içerir.

  5. Derleme Sayfasında, Project (Visual Basic)seçeneğinin On olarak ayarlanmış olduğundan emin olur.

Bellek İçi Veri Kaynağı ekleme

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

Veri kaynağını eklemek için

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

    Önemli

    Sınıfını tanımlamak ve izlenecek yol örneklerde kullanılan listeyi oluşturmak için gereken kod, Nasıl kullanılır: Öğe Student Listesi Oluşturma içinde sağlanır. Bu kopyayı buradan kopyalayıp projenize yapıştırarak. Yeni kod, projeyi oluşturulduğunda görünen kodun yerini almaktadır.

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

Sorgu Oluşturma

Yürütülürken bu bölüme eklenen sorgu, akademik derecesine göre ilk on sırada yer alan öğrencilerin bir listesini oluşturur. Sorgu her sefer tam Student nesneyi seçene kadar sorgu sonucu türü IEnumerable(Of Student) olur. Ancak, sorgu türü genellikle sorgu tanımlarında belirtilmez. Bunun yerine, derleyici türü belirlemek için yerel tür çıkarıcısı kullanır. Daha fazla bilgi için bkz. Yerel Tür Çıkarı. Sorgunun aralık değişkeni olan , kaynakta yer alan her bir örnek için bir başvuru olarak işlev gösterir ve içinde her nesnenin currentStudent Student students özelliklerine erişim students sağlar.

Basit bir sorgu oluşturmak için

  1. Projenin yönteminde Main aşağıdaki gibi işaretlenen 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ıp yapıştırın.

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

Sorguyu çalıştır

değişkeni studentQuery sorguyu çalıştırmanın sonuçlarını değil sorgunun tanımını içerir. Bir sorguyu çalıştırmaya özgü tipik bir mekanizma, bir döngü For Each olarak ifade eder. 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 Sorgunuz Yazma.

Sorguyu çalıştırmak için

  1. Aşağıdaki For Each döngüyü projenize sorgunun altına ekleyin.

    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ü studentRecord denetim değişkeninin üzerine bırakın. bir örnek studentRecord koleksiyonu döndüren için Student türü olarak studentQuery Student ertelenmiştir.

  3. CTRL+F5 tuşlarına basarak uygulamayı derleme ve çalıştırma. Konsol penceresindeki sonuçları not edinin.

Sorguyu Değiştirme

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

Sonuçları sıralamak için

  1. deyimiyle Order By sorgunun deyimi Where arasına Select aşağıdaki yan tümcesini ekleyin. yan Order By tümcesi, her öğrencinin soyadına göre sonuçları A'dan Z'ye alfabetik olarak 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
    

    Z'den Descending A'ya sıralamak için de belirtesiniz.

  3. CTRL+F5 tuşlarına basarak uygulamayı derleme ve çalıştırma. Konsol penceresindeki sonuçları not edinin.

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

  1. Sorgu ifadesinde yerel tanımlayıcıyı tanıtmak için bu bölüme kodu ekleyin. Yerel tanımlayıcı bir ara sonucu tutar. Aşağıdaki örnekte, öğrencinin adlarının ve son adlarının bir bir arada name yer alan 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ı geliştirebilir.

    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ı derleme ve çalıştırma. Konsol penceresindeki sonuçları not edinin.

Select yan tümcesinde bir alan planlamak için

  1. Öğeleri kaynakta yer alan öğelerden farklı bir dizi üreten bir sorgu oluşturmak için bu bölümdeki For Each sorguyu ve döngüyü ekleyin. Aşağıdaki örnekte, kaynak bir nesne koleksiyonudur, ancak her nesnenin yalnızca bir üyesi döndürülür: soyadı Garcia olan öğrencilerin Student adı. bir currentStudent.First dize olduğundan, tarafından döndürülen sıranın veri türü studentQuery3 bir dize IEnumerable(Of String) dizisidir. Önceki örneklerde olduğu gibi, için bir veri türünün ataması, derleyicinin yerel tür çıkarı kullanarak studentQuery3 belirlemesi için bıraktı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 studentQuery3 doğrulamak için fare işaretçisini kodun üzerine IEnumerable(Of String) bırakın.

  3. CTRL+F5 tuşlarına basarak uygulamayı derleme ve çalıştırma. Konsol penceresindeki sonuçları not edinin.

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

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

    Aşağıdaki örnek, akademik derece sırası 1 ile 10 arasında olan kıdemlilerin adını ve derecelerini döndüren bir sorgu oluşturur. Bu örnekte, yan tümcesi anonim bir türün örneğini döndüren ve anonim bir türün kullanılabilir adı olmayan bir tür olduğu için türünün studentQuery4 Select ertelenmiş olması gerekir.

    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ı derleme ve çalıştırma. Konsol penceresindeki sonuçları not edinin.

Ek Örnekler

Temel bilgileri anlıyoruz. LinQ sorgularının esnekliğini ve gücünü gösteren ek örneklerin listesi aşağıda verilmiştir. Her örnek, ne yaptığına ilişkin kısa bir açıklamadan öncedir. Fare işaretçisini, her sorgunun sorgu sonucu değişkeninin üzerine sabitler ve çıkan türü görebilir. Sonuçları For Each üretmek için bir 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 sahibi olduktan sonra, ilgilendiğiniz belirli linq sağlayıcısı türüne yönelik belgeleri ve örnekleri okumaya hazır olursanız:

Ayrıca bkz.