LINQ'i Destekleyen Visual Basic Özellikleri

DilLe Tümleşik Sorgu (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ş.

Örtük Olarak Yazılan 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 olarak ayarlamanız Option InferOngerekir.

' 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, veya Offise Option InferOn tür çıkarımı oluşur. ve Option StrictOnise Option InferOff 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. Ortak Name ve özelliklere sahip adlı Customer bir sınıfınız olduğunu varsayarsakPhone, 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 işleçleri, uygulayan her tür için LINQ sorgu işlevselliği sağlayan bir uzantı yöntemleri kümesidir IEnumerable<T>. , Unionve Intersectuzantılarını içerecek Countdiğer uzantılarIEnumerable<T>.

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öntemi, sıradan bir örnek yöntemi Stringolarak adlandı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, , Select, Order By, Take Whileve diğerleri gibi Wheretemel 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ı, ve Selectbağımsız değişkenlerini belirtmek için Where iki lambda ifadesi kullanan aşağıdaki örneğe benzer bir kodda derlenmiş olur.

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.

Ayrıca bkz.