Temel Sorgu İşlemleri (Visual Basic)
Bu konu, Visual Basic'teki Dil Tümleşik Sorgu (LINQ) ifadelerine ve sorguda gerçekleştirdiğiniz tipik işlem türlerinden bazılarına kısa bir giriş sağlar. Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
İzlenecek yol: Visual Basic'te Sorgu Yazma
Veri Kaynağını (Kimden) Belirtme
LINQ sorgusunda ilk adım, sorgulamak istediğiniz veri kaynağını belirtmektir. Bu nedenle, sorgudaki From
yan tümcesi her zaman önce gelir. Sorgu işleçleri, kaynağın türüne göre sonucu seçer ve şekillendirer.
Dim query = From cust In customers
' ...
From
yan tümcesi, veri kaynağını, customers
ve bir aralık değişkeninicust
belirtir. Aralık değişkeni bir döngü yineleme değişkeni gibidir, ancak sorgu ifadesinde gerçek yineleme gerçekleşmez. Sorgu yürütülürken, genellikle bir For Each
döngü kullanılarak, aralık değişkeni içindeki customers
ardışık her öğeye bir başvuru işlevi görür. Derleyici türü cust
çıkarabildiğinden açıkça belirtmeniz gerekmez. Açık yazma ile ve yazmadan yazılmış sorgu örnekleri için bkz . Sorgu İşlemlerinde Tür İlişkileri (Visual Basic).
Visual Basic'te yan tümcesinin From
nasıl kullanılacağı hakkında daha fazla bilgi için bkz . From Yan Tümcesi.
Veri Filtreleme (Yeri)
Büyük olasılıkla en yaygın sorgu işlemi Boole ifadesi biçiminde bir filtre uygulamaktır. Sorgu daha sonra yalnızca ifadenin doğru olduğu öğeleri döndürür. Where
Filtrelemeyi gerçekleştirmek için bir yan tümcesi kullanılır. Filtre, veri kaynağındaki hangi öğelerin sonuçta elde edilen diziye ekleneceği belirtir. Aşağıdaki örnekte, yalnızca Londra'da adresi olan müşteriler dahil edilir.
Dim londonCusts = From cust In customers
Where cust.City = "London"
' ...
bir yan tümcedeki Where
filtre ifadelerini birleştirmek için ve Or
gibi And
mantıksal işleçler kullanabilirsiniz. Örneğin, yalnızca Londra'dan gelen ve adı Devon olan müşterileri döndürmek için aşağıdaki kodu kullanın:
Where cust.City = "London" And cust.Name = "Devon"
Londra veya Paris'ten müşteri döndürmek için aşağıdaki kodu kullanın:
Where cust.City = "London" Or cust.City = "Paris"
Visual Basic'te yan tümcesini Where
kullanma hakkında daha fazla bilgi için bkz . Where Yan Tümcesi.
Veri Sıralama (Sıralama Ölçütü)
Döndürülen verileri belirli bir düzende sıralamak genellikle kullanışlıdır. Order By
yan tümcesi, döndürülen dizideki öğelerin belirtilen alan veya alanlarda sıralanmasına neden olur. Örneğin, aşağıdaki sorgu sonuçları özelliğine Name
göre sıralar. Bir Name
dize olduğundan, döndürülen veriler A'dan Z'ye alfabetik olarak sıralanır.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
' ...
Sonuçları ters sırada sıralamak için Z'den A'ya yan tümcesini Order By...Descending
kullanın. Varsayılan değer, Ascending
belirtilmediğinde Ascending
veya Descending
belirtilmediğindedir.
Visual Basic'te yan tümcesini Order By
kullanma hakkında daha fazla bilgi için bkz . Order By Yan Tümcesi.
Verileri Seçme (Seçim)
Select
yan tümcesi, döndürülen öğelerin biçimini ve içeriğini belirtir. Örneğin, sonuçlarınızın tam Customer
nesnelerden mi, yalnızca bir özellikten Customer
mi, özelliklerin bir alt kümesinden mi, çeşitli veri kaynaklarından gelen özelliklerin birleşiminden mi yoksa hesaplamaya dayalı yeni bir sonuç türünden mi oluşacağını belirtebilirsiniz. Select
yan tümcesi kaynak öğenin bir kopyası dışında bir şey ürettiğinde, işleme projeksiyon adı verilir.
Tam Customer
nesnelerden oluşan bir koleksiyonu almak için aralık değişkeninin kendisini seçin:
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust
Örnek Customer
, birçok alanı olan büyük bir nesneyse ve tek almak istediğiniz ad ise, aşağıdaki örnekte gösterildiği gibi öğesini seçebilirsiniz cust.Name
. Yerel tür çıkarımı, bunun sonuç türünü bir nesne koleksiyonundan Customer
dize koleksiyonuna değiştirdiğini algılar.
Dim londonCusts3 = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name
Veri kaynağından birden çok alan seçmek için iki seçeneğiniz vardır:
yan tümcesinde
Select
, sonuce eklemek istediğiniz alanları belirtin. Derleyici, özellikleri olarak bu alanlara sahip anonim bir tür tanımlar. Daha fazla bilgi için bkz . Anonim Türler.Aşağıdaki örnekte döndürülen öğeler anonim bir türün örnekleri olduğundan, kodunuzda başka bir yerde ada göre türe başvuramazsınız. Türü için derleyici tarafından belirlenen ad, normal Visual Basic kodunda geçerli olmayan karakterler içeriyor. Aşağıdaki örnekte, içinde sorgu
londonCusts4
tarafından döndürülen koleksiyondaki öğeler anonim tür örnekleridirDim londonCusts4 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select Name = cust.Name, Phone = cust.Phone For Each londonCust In londonCusts4 Console.WriteLine(londonCust.Name & " " & londonCust.Phone) Next
-veya-
Sonucuna eklemek istediğiniz belirli alanları içeren adlandırılmış bir tür tanımlayın ve yan tümcesinde
Select
türün örneklerini oluşturun ve başlatın. Bu seçeneği yalnızca döndürülecekleri koleksiyonun dışında tek tek sonuçları kullanmanız gerekiyorsa veya bunları yöntem çağrılarında parametre olarak geçirmeniz gerekiyorsa kullanın. Aşağıdaki örnekteki türülondonCusts5
: IEnumerable(Of Name Telefon).Public Class NamePhone Public Name As String Public Phone As String ' Additional class elements End Class
Dim londonCusts5 = From cust In customers Where cust.City = "London" Order By cust.Name Ascending Select New NamePhone With {.Name = cust.Name, .Phone = cust.Phone}
Visual Basic'te yan tümcesini Select
kullanma hakkında daha fazla bilgi için bkz . Yan Tümceyi Seçme.
Veri Katma (Katma ve Grup Katma)
Yan tümcesinde From
birden fazla veri kaynağını çeşitli yollarla birleştirebilirsiniz. Örneğin, aşağıdaki kod iki veri kaynağı kullanır ve sonuçta her ikisinden de özellikleri örtük olarak birleştirir. Sorgu, soyadları sesli harfle başlayan öğrencileri seçer.
Dim vowels() As String = {"A", "E", "I", "O", "U"}
Dim vowelNames = From student In students, vowel In vowels
Where student.Last.IndexOf(vowel) = 0
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
For Each vName In vowelNames
Console.WriteLine(vName.Initial & ": " & vName.Name)
Next
Not
Bu kodu, Nasıl yapılır: Öğe Listesi Oluşturma bölümünde oluşturulan öğrenci listesiyle çalıştırabilirsiniz.
Join
anahtar sözcüğü, SQL'deki ile INNER JOIN
eşdeğerdir. İki koleksiyondaki öğeler arasında eşleşen anahtar değerlerine göre iki koleksiyonu birleştirir. Sorgu, eşleşen anahtar değerlerine sahip koleksiyon öğelerinin tümünü veya bir bölümünü döndürür. Örneğin, aşağıdaki kod önceki örtük birleştirme eylemini yineler.
Dim vowelNames2 = From student In students
Join vowel In vowels
On student.Last(0) Equals vowel
Select Name = student.First & " " &
student.Last, Initial = vowel
Order By Initial
Group Join
koleksiyonları sql'de olduğu gibi tek bir hiyerarşik koleksiyonda birleştirir LEFT JOIN
. Daha fazla bilgi için bkz . Join Yan Tümcesi ve Grup Birleştirme Yan Tümcesi.
Verileri Gruplandırma (Gruplandırma Ölçütü)
Sorgu sonucundaki öğeleri öğelerin bir Group By
veya daha fazla alanına göre gruplandırmak için bir yan tümce ekleyebilirsiniz. Örneğin, aşağıdaki kod öğrencileri sınıf yılına göre gruplandırr.
Dim studentsByYear = From student In students
Select student
Group By year = student.Year
Into Classes = Group
For Each yearGroup In studentsByYear
Console.WriteLine(vbCrLf & "Year: " & yearGroup.year)
For Each student In yearGroup.Classes
Console.WriteLine(" " & student.Last & ", " & student.First)
Next
Next
Bu kodu, Nasıl yapılır: Öğe Listesi Oluşturma bölümünde oluşturulan öğrenci listesini kullanarak çalıştırırsanız, deyiminin For Each
çıktısı şöyle olur:
Yıl: Junior
Tucker, Michael
Garcia, Hugo
Gümüş, Meltem
Tucker, Lance
Yıl: Kıdemli
Omelchenko, Svetlana
Osada, Michiko
Fakhouri, Fadi
Feng, Hanying
Adams, Terry
Yıl: Birinci sınıf
Mortensen, Sven
Garcia, Cesar
Aşağıdaki kodda gösterilen varyasyon sınıf yıllarını ve ardından her yıl içindeki öğrencileri soyadına göre sıralar.
Dim studentsByYear2 = From student In students
Select student
Order By student.Year, student.Last
Group By year = student.Year
Into Classes = Group
hakkında Group By
daha fazla bilgi için bkz . Group By Yan Tümcesi.