İ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
Visual &Studio'yu başlatın.
Dosya menüsünde, Yeni'nin üzerine gelin ve Proje'ye tıklatın.
İçinde Yüklü Şablonlar tıklatın Visual Basic.
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ı.
Ü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
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
- Desen izleyin getStudents başka bir örneği eklemek için yöntemini Student sınıf listesine.Öğrenci eklemek için nesne başlatıcıları tanıtılacaktır.Daha fazla bilgi için bkz. Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic).
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
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
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
Aşağıdaki For Each projenizdeki sorgunun altındaki döngü.
For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) Next
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.
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
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
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
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
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
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
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
Fare işaretçisini üzerine bırakın studentQuery3 atanan türü olduğunu doğrulamak için kodunuzda IEnumerable(Of String).
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
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
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ı:
Ayrıca bkz.
Görevler
İzlenecek yol: C#'de Sorgu Yazma (LINQ)
Kavramlar
Yerel Türü Arabirimi (Visual Basic Başvurusu)
Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler (Visual Basic)