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.
Sorgu Language-Integrated (LINQ) adı, Visual Basic'te sorgu söz dizimini ve diğer dil yapılarını doğrudan dilde destekleyen teknolojiyi ifade eder. LINQ ile, dış veri kaynağına karşı sorgulamak için yeni bir dil öğrenmeniz gerekmez. Visual Basic kullanarak ilişkisel veritabanlarındaki, XML depolarındaki veya nesnelerdeki verileri sorgulayabilirsiniz. Sorgu özelliklerinin dille tümleştirilmesi, söz dizimi hataları ve tür güvenliği için derleme zamanı denetimine olanak tanır. Bu tümleştirme ayrıca, Visual Basic'te zengin ve çeşitli sorgular yazmak için bilmeniz gerekenlerin çoğunu zaten bildiğinizden emin olunmasını sağlar.
Aşağıdaki bölümlerde, giriş belgelerini, kod örneklerini ve örnek uygulamaları okumaya başlamanızı sağlamak için LINQ'yi destekleyen dil yapıları ayrıntılı olarak açıklanmaktadır. Dil özelliklerinin dille tümleşik sorguyu etkinleştirmek için nasıl bir araya geldiği hakkında daha ayrıntılı açıklamalar bulmak için bağlantılara da tıklayabilirsiniz. Başlamak için iyi bir yer olan İzlenecek Yol: Visual Basic'te Sorgu Yazma.
Sorgu İfadeleri
Visual Basic'teki sorgu ifadeleri, SQL veya XQuery'ninkine benzer bildirim temelli bir söz diziminde ifade edilebilir. Derleme zamanında sorgu söz dizimi, LINQ sağlayıcısının standart sorgu işleci uzantısı yöntemlerini uygulamasına yönelik yöntem çağrılarına dönüştürülür. Uygulamalar, bir Imports deyimiyle uygun ad alanını belirterek hangi standart sorgu işleçlerinin kapsam içinde olduğunu denetler. Visual Basic sorgu ifadesinin söz dizimi şöyle görünür:
Dim londonCusts = From cust In customers
Where cust.City = "London"
Order By cust.Name Ascending
Select cust.Name, cust.Phone
Daha fazla bilgi için bkz. Visual Basic'te LINQ'e Giriş.
Belirsiz Tanımlanan Değişkenler
Bir değişken bildirip başlatırken açıkça bir tür belirtmek yerine, derleyicinin türü çıkarmasını ve atamasını etkinleştirebilirsiniz. Bu, yerel tür çıkarımı olarak adlandırılır.
Türleri çıkarılmış değişkenler, türünü açıkça belirttiğiniz değişkenler gibi kesin bir şekilde türlenir. Yerel tür çıkarımı yalnızca bir yöntem gövdesi içinde yerel değişken tanımlarken çalışır. Daha fazla bilgi için bkz. Option Infer Deyimi ve Yerel Tür Çıkarımı.
Aşağıdaki örnekte yerel tür çıkarımı gösterilmektedir. Bu örneği kullanmak için Option Infer'yi On olarak ayarlamanız gerekir.
' The variable aNumber will be typed as an integer.
Dim aNumber = 5
' The variable aName will be typed as a String.
Dim aName = "Virginia"
Yerel tür çıkarımı, bu bölümün ilerleyen bölümlerinde açıklanan ve LINQ sorguları için gerekli olan anonim türlerin oluşturulmasını da mümkün kılar.
Aşağıdaki LINQ örneğinde, Option Infer ya On ya da Off ise tür çıkarımı oluşur.
Option Infer
Off ve Option StrictOn ise derleme zamanı hatası oluşur.
' Query example.
' If numbers is a one-dimensional array of integers, num will be typed
' as an integer and numQuery will be typed as IEnumerable(Of Integer)--
' basically a collection of integers.
Dim numQuery = From num In numbers
Where num Mod 2 = 0
Select num
Nesne Başlatıcıları
Nesne başlatıcılar, bir sorgunun sonuçlarını tutmak için anonim bir tür oluşturmanız gerektiğinde sorgu ifadelerinde kullanılır. Bunlar, adlandırılmış türlerdeki nesneleri sorguların dışında başlatmak için de kullanılabilir. Bir nesne başlatıcı kullanarak, bir oluşturucuyu açıkça çağırmadan bir nesneyi tek bir satırda başlatabilirsiniz. Varsayılan olarak adında Customer sınıfınızın, genel Name ve Phone ile diğer özellikleri olduğunu düşündüğümüzde, nesne başlatıcı şu şekilde kullanılabilir:
Dim aCust = New Customer With {.Name = "Mike",
.Phone = "555-0212"}
Daha fazla bilgi için bkz . Nesne Başlatıcıları: Adlandırılmış ve Anonim Türler.
Anonim Türler
Anonim türler, bir özellik kümesini geçici olarak sorgu sonucuna eklemek istediğiniz bir öğede gruplandırmak için kullanışlı bir yol sağlar. Bu, öğe için adlandırılmış bir veri türü tanımlamadan sorgudaki kullanılabilir alanların herhangi bir bileşimini herhangi bir sırada seçmenizi sağlar.
Anonim bir tür, derleyici tarafından dinamik olarak oluşturulur. Türün adı derleyici tarafından atanır ve her yeni derlemeyle değişebilir. Bu nedenle, ad doğrudan kullanılamaz. Anonim türler aşağıdaki şekilde başlatılır:
' Outside a query.
Dim product = New With {.Name = "paperclips", .Price = 1.29}
' Inside a query.
' You can use the existing member names of the selected fields, as was
' shown previously in the Query Expressions section of this topic.
Dim londonCusts1 = From cust In customers
Where cust.City = "London"
Select cust.Name, cust.Phone
' Or you can specify new names for the selected fields.
Dim londonCusts2 = From cust In customers
Where cust.City = "London"
Select CustomerName = cust.Name,
CustomerPhone = cust.Phone
Daha fazla bilgi için bkz. Anonim Türler.
Uzantı Metotları
Uzantı yöntemleri, tanım dışından bir veri türüne veya arabirime yöntem eklemenize olanak tanır. Bu özellik, türü gerçekten değiştirmeden mevcut bir türe yeni yöntemler eklemenize olanak tanır. Standart sorgu operatörleri, IEnumerable<T> uygulayan herhangi bir tür için LINQ sorgu işlevselliği sağlayan bir uzantı yöntemi kümesidir. IEnumerable<T> uzantısına diğer uzantılar olarak Count, Union ve Intersect dahildir.
Aşağıdaki uzantı yöntemi sınıfına String bir yazdırma yöntemi ekler.
' Import System.Runtime.CompilerServices to use the Extension attribute.
<Extension()>
Public Sub Print(ByVal str As String)
Console.WriteLine(str)
End Sub
Yöntem, String'nin sıradan bir örnek yöntemi gibi çağrılır.
Dim greeting As String = "Hello"
greeting.Print()
Daha fazla bilgi için bkz . Uzantı Yöntemleri.
Lambda İfadeleri
Lambda ifadesi, tek bir değer hesaplayan ve döndüren adı olmayan bir işlevdir. Adlandırılmış işlevlerin aksine, bir lambda ifadesi aynı anda tanımlanabilir ve yürütülebilir. Aşağıdaki örnekte 4 görüntülenir.
Console.WriteLine((Function(num As Integer) num + 1)(3))
Lambda ifade tanımını bir değişken adına atayabilir ve ardından işlevi çağırmak için adı kullanabilirsiniz. Aşağıdaki örnekte ayrıca 4 görüntülenir.
Dim add1 = Function(num As Integer) num + 1
Console.WriteLine(add1(3))
LINQ'de lambda ifadeleri, standart sorgu işleçlerinin birçoğunun altında yer alır. Derleyici, , Where, Select, Order Byve diğerleri gibi Take Whiletemel sorgu yöntemlerinde tanımlanan hesaplamaları yakalamak için lambda ifadeleri oluşturur.
Örneğin, aşağıdaki kod, bir öğrenci listesinden tüm son sınıf öğrencileri döndüren bir sorguyu tanımlar.
Dim seniorsQuery = From stdnt In students
Where stdnt.Year = "Senior"
Select stdnt
Sorgu tanımı, Where ve Select için bağımsız değişkenleri belirtmek amacıyla iki lambda ifadesi kullanan aşağıdaki örneğe benzer bir kod olarak derlenir.
Dim seniorsQuery2 = students.
Where(Function(st) st.Year = "Senior").
Select(Function(s) s)
Her iki sürüm de döngü For Each kullanılarak çalıştırılabilir:
For Each senior In seniorsQuery
Console.WriteLine(senior.Last & ", " & senior.First)
Next
Daha fazla bilgi için bkz. Lambda İfadeleri.