Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu kılavuzda, Language-Integrated Sorgu (LINQ) sorgu ifadelerini yazmak için Visual Basic dil özelliklerini nasıl kullanabileceğ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 uygulaması projesi oluşturmak için
Visual Studio'yu başlatı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.dllbağlantısı olarak içerir. Ayrıca, Başvurular Sayfasındaki İçeri Aktarılan ad alanları listesi, Proje Tasarımcısı (Visual Basic)System.Linq ad alanını içerir.
Derleme Sayfasında, Proje Tasarımcısı (Visual Basic), Option çıkarım seçeneğinin Açık olarak ayarlandığından emin olun.
In-Memory Veri Kaynağı Ekleme
Bu kılavuzdaki sorguların veri kaynağı nesnelerin listesidir Student . Her bir Student nesne bir ad, soyadı, bir sınıf yılı ve öğrenci topluluğunda akademik bir rütbe içerir.
Veri kaynağını eklemek için
Bir
Studentsınıf tanımlayın ve sınıfın örneklerinin listesini oluşturun.Önemli
Sınıfı tanımlamak
Studentve 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.
Öğrenci listesine yeni bir öğrenci eklemek için
-
getStudentsyöntemindeki deseni izleyerekStudentsınıfının başka bir örneğini listeye ekleyin. Öğrenci eklemek, size nesne başlatıcılarını tanıtacaktı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, currentStudentkaynağındaki Studenther students ö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
Mainaş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 currentStudentDerleyici tarafından atanan türün
studentQueryolduğunu doğrulamak için kodunuzdakiIEnumerable(Of Student)üzerine fare işaretçisini bekletin.
Sorguyu Çalıştırma
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 Eachdöngünün eklenmesini sağlayın.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ü denetim değişkeninin
studentRecordüzerinde bekletin.studentRecordtürününStudentolduğu çıkarılır, çünküstudentQuery,Studentörneklerinden oluşan bir koleksiyon 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
Aşağıdaki
Order Byhükmünü, sorgununWheredeyimi ileSelectdeyimi arasına ekleyin.Order Byyan tümcesi, sonuçları her öğrencinin soyadına göre alfabetik olarak A'dan Z'ye 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 AscendingAyrı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) NextCTRL+F5 tuşlarına basarak uygulamayı derleyin ve çalıştırın. Konsol penceresindeki sonuçları not edin.
Select yan tümcesinde bir alanı yansıtmak için
Öğeleri kaynaktaki öğelerden farklı olan bir dizi oluşturan bir sorgu oluşturmak için bu bölümdeki sorguyu ve
For Eachdö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ı.currentStudent.Firstbir dize olduğundan,studentQuery3tarafından döndürülen dizinin veri türü,IEnumerable(Of String)bir dize dizisidir. Önceki örneklerde olduğu gibi, bir veri türününstudentQuery3için atanması, derleyicinin yerel tür çıkarımını kullanarak belirlemesine 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) NextAtanan türün
studentQuery3olduğunu doğrulamak için fare işaretçisini kodunuzdakiIEnumerable(Of String)üzerinde 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şturabilirsiniz.
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 (
currentStudentFirstö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ümcesindekiSelectalanları 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,
studentQuery4türü anonim bir türün örneğini döndürenSelectyan tümcesi nedeniyle belirlenmelidir ve anonim bir türün kullanılabilir bir adı yoktur.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ı 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 Bilgiler
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: