Aracılığıyla paylaş


İlk LINQ sorgunuzu (Visual Basic) yazma

A sorgu bir veri kaynağından veri alan bir ifadesidir.Sorguları adanmış sorgu dilinde ifade edilir.Zaman içinde farklı diller için farklı türde veri kaynağına, örneğin, ilişkisel veritabanları için sql ve XQuery xml için geliştirilmektedir.Bu, uygulama geliştiricisi, her veri kaynağı veya desteklenen veri biçimi türü için yeni bir sorgu dili öğrenmek için gerekli kılar.

Dil ile Tümleşik Sorgu (LINQ)çeşitli veri kaynakları ve biçimler arasında veri ile çalışmak için tutarlı bir model sunarak durum basitleştirir.İçinde bir LINQ , sorgu her zaman çalıştığınız sahip nesneler.Aynı temel kodlama desenler sorgulamak ve xml belgelerindeki veriler, sql veritabanları, ado.net datasets ve varlıkları, .NET Framework derlemeleri ve herhangi bir diğer kaynak veya biçim için dönüştürmek için kullandığınız bir LINQ sağlayıcı kullanılabilir.Bu belge üç aşamasının oluşturulması ve basic kullanımını açıklar LINQ sorgular.

video bağlantısı İlgili video gösterimi için bkz: nasıl yapmak ı: Get Started LINQ ile?.

Sorgu işlemi üç aşaması

LINQSorgu işlemleri üç eylemden oluşur:

  1. Veri kaynağı veya kaynakları edinin.

  2. Sorgu oluşturun.

  3. Sorguyu çalıştırın.

İçinde LINQ, sorgu oluşturulmasından bir sorgunun yürütülmesi farklıdır.Tüm verileri bir sorgu oluşturarak almak değil.Bu nokta, bu konunun ilerleyen bölümlerinde daha ayrıntılı ele alınmıştır.

Aşağıdaki örnek, sorgu işlemi üç bölümden gösterir.Örnek dizisi gösterim amacıyla uygun veri kaynağı olarak kullanır.Ancak, aynı kavramlar diğer veri kaynakları için de geçerlidir.

[!NOT]

Üzerinde Derleme sayfası, proje Tasarımcısı (Visual Basic), emin seçeneği gerçekleştirip ayarlamak ,.

' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers
                 Where num Mod 2 = 0
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

Çıktı:

0 2 4 6

Veri kaynağı

Önceki örnekte veri kaynağında bir dizi olduğundan, dolaylı olarak genel destekleyen IEnumerable<T> arabirim.Bir dizi için bir veri kaynağı olarak kullanmanızı sağlayan bu gerçeği olan bir LINQ sorgu.Destekleyen türleri IEnumerable<T> veya türetilmiş bir arabirim gibi genel IQueryable<T> adı verilen sorgulanabilir türleri.

Dolaylı olarak sorgulanabilir bir tür olarak herhangi bir değişiklik veya olarak hizmet verecek özel işlemden dizi gerektirir bir LINQ veri kaynağı.Aynı destekleyen herhangi bir koleksiyon türü için geçerlidir IEnumerable<T>, genel de dahil olmak üzere List<T>, Dictionary<TKey, TValue>ve diğer sınıflarda .NET Framework sınıf kitaplığı.

Kaynak veriler zaten uygulamayan, IEnumerable<T>, LINQ sağlayıcı işlevselliğini uygulamak için gerekli Standart sorgu işleçler bu veri kaynağı için.Örneğin, LINQ to XML bir xml belgesi sorgulanabilir yüklenirken işini işler XElement , aşağıdaki örnekte gösterildiği gibi yazın.Standart sorgu işleçler hakkında daha fazla bilgi için bkz: Standart sorgu işleçler genel bakış.

' Create a data source from an XML document.
Dim contacts = XElement.Load("c:\myContactList.xml")

İle LINQ to SQL, ilk önce bir nesne ilişkisel tasarım zamanında, el ile veya kullanarak eşleme oluşturma Object Relational Designer (O/R Designer).Sorgularınızı nesneler karşı ve çalışma zamanında yaz LINQ to SQL veritabanı ile iletişimi yönetir.Aşağıdaki örnekte, customers veritabanındaki belirli bir tabloyu temsil eder ve Table<TEntity> destekler genel IQueryable<T>.

' Create a data source from a SQL table.
Dim db As New DataContext("C:\Northwind\Northwnd.mdf")
Dim customers As Table(Of Customer) = db.GetTable(Of Customer)

Belirli tür veri kaynağı oluşturma hakkında daha fazla bilgi için çeşitli belgelerine bakın LINQ sağlayıcıları.(Bu sağlayıcılar listesi için bkz: LINQ (dil ile bütünleşik sorgu).) Temel Kural basittir: bir LINQ veri kaynağı olan genel destekleyen herhangi bir nesne IEnumerable<T> devralan bir arabirim veya arabirim.

[!NOT]

Gibi türleri ArrayList genel olmayan Destek IEnumerable arabirimi da kullanılabilir olarak LINQ veri kaynakları.Kullanan bir örnek bir ArrayList, bkz: Nasıl yapılır: bir ArrayList LINQ ile sorgulama.

Sorgu

Sorguda, veri kaynağı veya kaynakları almak istediğiniz bilgileri belirtin.Aynı zamanda nasıl bu bilgileri sıralanmış, gruplandırılmış veya onu döndürülmeden önce yapılandırılmış belirtme seçeneğiniz vardır.Sorgu oluşturmayı etkinleştirmek için Visual Basic diline yeni sorgu sözdizimi birleştirmiştir.

Yürütüldüğünde, sorgu aşağıdaki örnekte tüm çift sayılar tamsayı diziden verir numbers.

' Data source.
Dim numbers() As Integer = {0, 1, 2, 3, 4, 5, 6}

' Query creation.
Dim evensQuery = From num In numbers
                 Where num Mod 2 = 0
                 Select num

' Query execution.
For Each number In evensQuery
    Console.Write(number & " ")
Next

Üç yan tümcelerini sorgu ifadesi içeriyor: From, Where, ve Select.Belirli bir işlevi ve amacı, her sorgu ifade yan tümcesi ele alınmıştır Temel sorgu işlemleri (Visual Basic).Daha fazla bilgi için bkz. Sorgular (Visual Basic).Unutmayın, LINQ, sorgu tanımı genellikle bir değişkende depolanan ve daha sonra yürütülür.Sorgu değişken gibi evensQuery önceki örnekte sorgulanabilir bir tür olmalıdır. Türü evensQuery olan IEnumerable(Of Integer), yerel tür çıkarımı kullanarak derleyici tarafından atanmış.

Sorgu değişkeni hiçbir eylemde bulunmaz ve hiçbir veri döndürür bilinmesi önemlidir.Bunu yalnızca sorgu tanımını depolar.Önceki örnekte olduğu For Each döngü sorguyu yürütür.

Sorgu yürütme

Sorgu yürütme sorgu oluşturma ' farklıdır.Sorguyu sorgu oluşturma tanımlar, ancak yürütme farklı bir mekanizma tarafından tetiklenir.Tanımlandığı gibi bir sorgu yürütülebilecek (hemen bir yürütme), veya tanım depolanabilir ve sorguyu daha sonra yürütülebilecek (Ertelenmiş yürütme).

Bb384667.collapse_all(tr-tr,VS.110).gifErtelenmiş yürütme

Tipik bir LINQ benzer bir önceki örnekte, sorgu evensQuery tanımlanır.Sorgu oluşturur ancak hemen yürütmez.Bunun yerine, sorgu tanımını sorgu değişkeninde saklanan evensQuery.Sorguyu daha sonra genellikle kullanarak yürütmek bir For Each gibi bir standart sorgu işlecini uygulayarak ya da değerler dizisi verir döngü, Count veya Max.Bu işlem için olarak adlandırılır Ertelenmiş yürütme.

' Query execution that results in a sequence of values.
For Each number In evensQuery
    Console.Write(number & " ")
Next

' Query execution that results in a single value.
Dim evens = evensQuery.Count()

Değerleri bir dizi için alınan yineleme değişkeni kullanarak verilere For Each döngü (number önceki örnekte).Çünkü sorgu değişkeni evensQuery, sorgu sonuçları yerine sorgu tanımını içeren bir sorgu, birden fazla kez sorgu değişkeni kullanarak istediğiniz sıklıkta çalıştırabilirsiniz.Örneğin, uygulamanızda ayrı bir uygulama tarafından sürekli olarak güncelleştirilen bir veritabanı olabilir.Bu veritabanından veri alan bir sorgu oluşturduktan sonra kullanabileceğiniz bir For Each sorguyu tekrar tekrar yürütmek için döngü her zaman en güncel verileri alınıyor.

Aşağıdaki örnek, nasıl ertelenmiş yürütme gösterir çalışır.Sonra evensQuery2 tanımlanan ve birlikte yürütülen bir For Each , önceki örneklerde olduğu gibi veri kaynağı içindeki bazı öğeler döngü numbers değiştirilir.Daha sonra ikinci For Each döngü çalışır evensQuery2 yeniden.Sonuçlar ikinci kez farklı, çünkü For Each döngü yürütür sorgu yeniden, yeni değerler kullanarak numbers.

Dim numberArray() = {0, 1, 2, 3, 4, 5, 6}

Dim evensQuery2 = From num In numberArray
                  Where num Mod 2 = 0
                  Select num

Console.WriteLine("Evens in original array:")
For Each number In evensQuery2
    Console.Write("  " & number)
Next
Console.WriteLine()

' Change a few array elements.
numberArray(1) = 10
numberArray(4) = 22
numberArray(6) = 8

' Run the same query again.
Console.WriteLine(vbCrLf & "Evens in changed array:")
For Each number In evensQuery2
    Console.Write("  " & number)
Next
Console.WriteLine()

Çıktı:

Evens in original array:

0 2 4 6

Evens in changed array:

0 10 2 22 8

Bb384667.collapse_all(tr-tr,VS.110).gifHemen bir yürütme

Ertelenmiş yürütme sorgular, sorgu tanımı daha sonra çalıştırılmak için bir sorgu değişkeni depolanır.Hemen bir yürütme sorgu tanımı anda yürütülür.Yürütme, sorgu sonucu, tek tek öğelere erişim gerektiren bir yöntemi uygulandığında tetiklenir.Hemen yürütme genellikle tek bir değer standart sorgu işleçler kullanarak zorladı.Examples are Count, Max, Average, and First.Bu standart sorgu işleçler hesaplamak ve tek olan bir sonuca dönmek için uygulanan sorguyu çalıştırın.Tek bir değer standart sorgu işleçler hakkında daha fazla bilgi için bkz: Toplama işlemleri, Öğe işlemleri, ve Nicelik belirteci işlemleri.

Aşağıdaki sorgu sayısı çift sayı dizisi döndürür.Sorgu tanımının kaydedilmemişse, ve numEvens olan basit bir Integer.

Dim numEvens = (From num In numbers
                Where num Mod 2 = 0
                Select num).Count()

Kullanarak aynı sonucu elde Aggregate yöntem.

Dim numEvensAgg = Aggregate num In numbers
                  Where num Mod 2 = 0
                  Select num
                  Into Count()

Çağırarak bir sorgunun yürütülmesi de zorunlu ToList veya ToArray yöntemi (hemen) sorgu veya sorgu değişkeni (ertelenmiş), aşağıdaki kodda gösterildiği gibi.

' Immediate execution.
Dim evensList = (From num In numbers
                 Where num Mod 2 = 0
                 Select num).ToList()

' Deferred execution.
Dim evensQuery3 = From num In numbers
                  Where num Mod 2 = 0
                  Select num
' . . .
Dim evensArray = evensQuery3.ToArray()

Önceki örneklerde, evensQuery3 bir sorgu değişkeni, ancak evensList bir listedir ve evensArray bir dizidir.

Kullanarak ToList veya ToArray hemen zorlamak için yürütme hemen sorguyu çalıştırmak ve sonuçları bir tek koleksiyon nesnesi önbelleğe istediğiniz senaryolarda kullanışlıdır.Bu yöntemler hakkında daha fazla bilgi için bkz. Veri türleri dönüştürme.

Bir sorgu kullanarak yürütülecek neden olabilir bir IEnumerable yöntemi gibi IEnumerable.GetEnumerator yöntem.

İlgili Video gösteriler

Nasıl ı: Başlarken ile LINQ?

Video nasıl yapılır: Visual Basic'te sorguları yazma

Ayrıca bkz.

Görevler

LINQ Örnekleri

Kavramlar

O/R Designer Overview

Yerel tür kesmesi (Visual Basic)

Standart sorgu işleçler genel bakış

LINQ Visual Basic giriş

Diğer Kaynaklar

Visual Basic'te LINQ ile çalışmaya başlama

Visual Basic'te LINQ

Sorgular (Visual Basic)