İ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
Visual Studio’yu çalıştırın.
Dosya menüsünde Yeni'nin üzerine gelin ve Proje'ye tıklayın.
Yüklü Şablonlar listesinde Visual Basic'e tıklayın.
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.
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
- Sınıfının başka bir örneğini listeye eklemek için yöntemindeki
Student
desenigetStudents
izleyin. Öğrenci eklendiğinde nesne başlatıcıları tanıtılır. Daha fazla bilgi için bkz . Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler.
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, currentStudent
kaynağındaki students
her 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
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
Derleyici tarafından atanan türün olduğunu
IEnumerable(Of Student)
doğrulamak için fare işaretçisini kodunuz üzerindestudentQuery
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
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
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ırStudent
, çünküstudentQuery
bir örnek koleksiyonuStudent
döndürür.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
Deyimiyle
Select
sorgununWhere
deyimi arasına aşağıdakiOrder 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
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
.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
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
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
Öğ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 koleksiyonudurStudent
, ancak her nesnenin yalnızca bir üyesi döndürülür: soyadı Garcia olan öğrencilerin adı. BircurrentStudent.First
dize olduğundan, tarafındanstudentQuery3
döndürülen dizinin veri türü bir dize dizisidirIEnumerable(Of String)
. Önceki örneklerde olduğu gibi, derleyicinin yerel türstudentQuery3
çı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
Atanan türün olduğunu
IEnumerable(Of String)
doğrulamak için fare işaretçisini kodunuz üzerindestudentQuery3
bekletin.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
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 (
currentStudent
First
ö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ümcesindekiSelect
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ırSelect
.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
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: