İ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
Visual Studio’yu çalıştırın.
Dosya menüsünde Yeni'nin üzerine gelin ve ardından Dosya'ya Project.
Yüklü Şablonlar listesinde, Visual Basic.
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.
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
Studentsı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
StudentListesi 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
- Sınıfın başka bir
getStudentsörneğini listeye eklemek içinStudentyönteminde desenini izleyin. Öğrenciyi eklemek sizi nesne başlatıcılara tanıtacak. Daha fazla bilgi için bkz. Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler.
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
Projenin yönteminde
Mainaş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 currentStudentDerleyici tarafından atanan
studentQuerytürün olduğunu doğrulamak için fare işaretçisini kodunuz üzerindeIEnumerable(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
Aşağıdaki
For Eachdöngüyü projenize sorgunun altına ekleyin.For Each studentRecord In studentQuery Console.WriteLine(studentRecord.Last & ", " & studentRecord.First) NextVeri türünü görmek için fare işaretçisini döngü
studentRecorddenetim değişkeninin üzerine bırakın. bir örnekstudentRecordkoleksiyonu döndüren içinStudenttürü olarakstudentQueryStudentertelenmiştir.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
deyimiyle
Order Bysorgunun deyimiWherearasınaSelectaşağıdaki yan tümcesini ekleyin. yanOrder Bytümcesi, her öğrencinin soyadına göre sonuçları A'dan Z'ye alfabetik olarak sıralar.Order By currentStudent.Last AscendingSoyadı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 AscendingZ'den
DescendingA'ya sıralamak için de belirtesiniz.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
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
nameyer 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) NextCTRL+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
Öğeleri kaynakta yer alan öğelerden farklı bir dizi üreten bir sorgu oluşturmak için bu bölümdeki
For Eachsorguyu 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 öğrencilerinStudentadı. bircurrentStudent.Firstdize olduğundan, tarafından döndürülen sıranın veri türüstudentQuery3bir dizeIEnumerable(Of String)dizisidir. Önceki örneklerde olduğu gibi, için bir veri türünün ataması, derleyicinin yerel tür çıkarı kullanarakstudentQuery3belirlemesi 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) NextAtanan türün olduğunu
studentQuery3doğrulamak için fare işaretçisini kodun üzerineIEnumerable(Of String)bırakın.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
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önmekFirstistediğ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 birSelecttü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
studentQuery4Selectertelenmiş 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) NextCTRL+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: