Aracılığıyla paylaş


İzlenecek Yol: Visual Basic'de Sorgu Yazma

Bu izlenecek yolda, yazmak için Visual Basic dil özelliklerini nasıl kullanabileceğiniz gösterilmektedir Dil ile Tümleşik Sorgu (LINQ) sorgu ifadelerini.Anlatım Öğrenci nesnelerinin bir listesini sorgular oluşturmak, sorguları çalıştırmak ve bunlarda değişiklik gösterir.Sorgu nesne başlatıcıları, yerel tür çıkarımı ve Anonim türler de dahil olmak üzere Visual Basic 2008'de yeni olan çeşitli özellikler ekleyebilirsiniz.

Bu izlenecek yolu tamamladıktan sonra örnekler ve belirli belgeler için geçmek hazır olacak LINQ sağlayıcı ilgileniyorsanız.LINQproviders include LINQ - SQL, LINQ - DataSet, and LINQ - XML.

Proje oluşturma

Konsol uygulama projesi oluşturmak için

  1. Visual &Studio'yu başlatın.

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

  3. İçinde Yüklü Şablonlar tıklatın Visual Basic.

  4. Proje türleri listesinde tıklatın Konsol uygulaması.İçinde adı kutusunda, proje için bir ad yazın ve ardından Tamam.

    Bir proje oluşturulur.Varsayılan olarak, System.Core.dll bir başvuru içerir.Ayrıca, Imported ad listesi, Başvurular Sayfası, Proje Tasarımcısı (Visual Basic) içeren System.Linq ad alanı.

  5. Üzerinde Derleme Sayfası, Proje Tasarımcısı (Visual Basic), emin seçeneği gerçekleştirip ayarlamak ,.

Bir bellek içi veri kaynağı ekleme

Bu izlenecek yolda sorguları için veri kaynağını listesidir Student nesneler.Her Student ilk adı, Soyadı, sınıf yıl ve bir akademik rütbe Öğrenci gövde nesnesi içerir.

Veri kaynağı oluşturmak için

  • Tanımlayan bir Student sınıf ve sınıfın örneklerini listesi oluşturun.

    Önemli notÖnemli

    Tanımlamak için gerekli kodu Student sınıf ve kullanılan liste oluşturma izlenecek yolda örnekler verilir Nasıl yapılır: Öğe Listesi Oluşturma.Oradan kopyalayın ve projenize yapıştırın.Yeni kod projeyi oluşturduğunuzda, görünen kodu yerine geçer.

Yeni bir öğrenci öğrenciler listesine eklemek için

Sorgu Oluşturma

Bu bölüme eklenen sorgu çalıştırıldığında, bunları ilk on akademik mertebesini koyar öğrenciler listesi üretir.Sorgu tam seçer çünkü Student sorgu sonucu türü her zaman nesnedir IEnumerable(Of Student).Ancak, sorgu türünü sorgu tanımlarında genellikle belirtilmez.Bunun yerine, derleyici yerel tür çıkarımı türünü belirlemek için kullanır.Daha fazla bilgi için bkz. Yerel Türü Arabirimi (Visual Basic Başvurusu).Sorgunun aralık değişkeni currentStudent, her bir başvuru olarak hizmet veren Student örneği kaynağındaki students, her bir nesnenin özelliklerine erişim sağlayan students.

Basit bir sorgu oluşturmak için

  1. Yerinde bulmak Main yöntemi projenin aşağıdaki gibi işaretlenir:

    ' ****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. Fare işaretçisini üzerine bırakın studentQuery derleyici tarafından atanan türü olduğunu doğrulamak için kodunuzda IEnumerable(Of Student).

Sorguyu çalıştırmak

Değişken studentQuery çalıştırılan sorgunun sonuçları değil sorgu tanımını içerir.Bir sorguyu çalıştırmak için tipik bir mekanizmadır bir For Each döngü.Her öğe, döndürülen dizi değişkeni döngü erişilir.Sorgu yürütme hakkında daha fazla bilgi için bkz: İlk LINQ Sorgunuzu Yazma (Visual Basic).

Sorguyu çalıştırmak için

  1. Aşağıdaki For Each projenizdeki sorgunun altındaki döngü.

    For Each studentRecord In studentQuery
        Console.WriteLine(studentRecord.Last & ", " & studentRecord.First)
    Next
    
  2. Fare işaretçisini üzerinde döngü denetim değişkeni studentRecord veri türünü görmek için.Türü studentRecord gibi algılanır Student, çünkü studentQuery koleksiyonunu döndürür Student örnekleri.

  3. Yapı ve ctrl + F5 tuşuna basarak uygulamayı çalıştırın.Konsol penceresinde sonuçları dikkat edin.

Sorguyu değiştirin

Belirli bir sırada olmaları durumunda sorgu sonuçlarını tarama daha kolaydır.Döndürülen dizi kullanılabilir herhangi bir alanına göre sıralama yapabilirsiniz.

Sonuçlarını sıralamak için

  1. Aşağıdaki Order By yan tümcesi Where ifadesi ve Select sorgu deyimi.Order By Yan tümcesi sipariş sonuçlarını alfabetik olarak A'dan z, her öğrencinin ismi son göre.

    Order By currentStudent.Last Ascending 
    
  2. Soyadı ve sonra adı sipariş etmek için her iki alanı sorguya ekleyin:

    Order By currentStudent.Last Ascending, currentStudent.First Ascending 
    

    Ayrıca belirtebilirsiniz Descending z a. kaliteden için

  3. Yapı ve ctrl + F5 tuşuna basarak uygulamayı çalıştırın.Konsol penceresinde sonuçları dikkat edin.

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

  1. Bu bölümde, bir sorgu ifadesinde yerel tanımlayıcı tanıtmak için kod ekleyin.Yerel tanımlayıcı bir Ara sonuç tutacaktır.Aşağıdaki örnekte, name Öğrenci birleşimi tutan bir tanımlayıcı ilk ve son adları olur.Yerel Tanımlayıcı kolaylık sağlamak için kullanılabilir veya birden çok kez hesaplanacak bir ifadenin sonuçlarını depolayarak performansını artırabilirsiniz.

    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. Yapı ve ctrl + F5 tuşuna basarak uygulamayı çalıştırın.Konsol penceresinde sonuçları dikkat edin.

Select yan tümcesinde bir alan proje

  1. Sorguya ekleyin ve For Each üreten bir dizi öğeleri farklı kaynak öğelerinden bir sorgu oluşturmak için bu bölümdeki döngü.Aşağıdaki örnekte, kaynak topluluğudur Student nesneleri, ancak her bir nesnenin yalnızca bir üye döndürülür: Adı Soyadı Garcia olan öğrenciler.Çünkü currentStudent.First bir dize veri türü tarafından döndürülen dizi studentQuery3 olan IEnumerable(Of String), dizeler dizisi.Önceki örneklerde olduğu gibi atama bir veri türü studentQuery3 yerel tür çıkarımı kullanarak belirlemek derleyici için bırakılı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. Fare işaretçisini üzerine bırakın studentQuery3 atanan türü olduğunu doğrulamak için kodunuzda IEnumerable(Of String).

  3. Yapı ve ctrl + F5 tuşuna basarak uygulamayı çalıştırın.Konsol penceresinde sonuçları dikkat edin.

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

  1. Nasıl anonim türlerini görmek için bu bölümdeki kod sorgularda kullanılan ekleyin.Veri kaynağı kayıtların tamamını yerine birkaç alan dönmek istediğinizde, bunları sorgularda kullanılan (currentStudent önceki örneklerde kayıtları) veya tek alanları (First önceki bölümdeki).Alanlarında belirttiğiniz sonucu dahil etmek istediğiniz alanları içeren yeni bir adlandırılmış türü tanımlamak yerine, Select yan tümcesi ve derleyici ile bu alanların özellikleri olarak anonim bir tür oluşturur. Daha fazla bilgi için bkz. Anonim Türleri (Visual Basic).

    Aşağıdaki örnek, 1-10, akademik rütbe sırasına göre akademik mertebesini arasındadır seniors derecesini ve adını döndüren bir sorgu oluşturur.Bu örnekte, türü studentQuery4 çünkü olayla gerekir Select yan tümcesi bir anonim türünde bir örnek verir ve bir anonim tür kullanılabilir adı yok.

    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. Yapı ve ctrl + F5 tuşuna basarak uygulamayı çalıştırın.Konsol penceresinde sonuçları dikkat edin.

Ek örnekler

Temel kavramları anladığınıza, güç ve esneklik göstermek için ek örnekler listesi aşağıdadır LINQ sorgular.Her örnek, yaptığı işin kısa bir açıklama ile takip eder.Fare işaretçisini çıkarılan türünü görmek her sorgu için sorgu sonucu değişkeni üzerine bırakın. Kullanım bir For Each sonuçları üretmek için döngü.

' 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ışma temel kavramları hakkında bilgi sahibi olduktan sonra belgeleri ve örnekleri belirli tür için okumak hazır LINQ , ilgilendiğiniz sağlayıcı:

Nesnelere LINQ

LINQ to SQL [LINQ to SQL]

LINQ to XML

LINQ to DataSet

Ayrıca bkz.

Görevler

İzlenecek yol: C#'de Sorgu Yazma (LINQ)

Kavramlar

Tamamlayıcı LINQ Kaynakları

Yerel Türü Arabirimi (Visual Basic Başvurusu)

Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic)

Anonim Türleri (Visual Basic)

Visual Basic'de LINQ'e Giriş

Diğer Kaynaklar

LINQ (Dil ile Tümleşik Sorgu)

Visual Basic'te LINQ'e Başlarken

Visual Basic'de LINQ

Sorgular (Visual Basic)