Aracılığıyla paylaş


Giriş LINQ sorguları (C#)

A sorgu bir veri kaynağından veri alan bir ifadesidir.Sorguları genellikle özel sorgu dilinde ifade edilir.Farklı diller zamanla çeşitli veri kaynakları ilişkisel veritabanları için örneğin sql ve XQuery xml için geliştirilmiştir.Bu nedenle, veri kaynağı veya veri biçimini desteklemesi gereken her tür için yeni bir sorgu dili öğrenmek geliştiriciler kalmışlardır.LINQBu durum, çeşitli veri kaynakları ve biçimler arasında veri ile çalışmak için tutarlı bir model sunarak basitleştirir.İçinde bir LINQ , sorgu her zaman çalıştığınız sahip nesneler.xml belgeleri, sql veritabanları, sorgu ve dönüşüm verileri için aynı temel kodlama desenleri kullanmak ADO.NET , .NET derlemeleri DataSet ve kendisi için herhangi bir biçimde bir LINQ sağlayıcı kullanılabilir.

Sorgu işlemi üç bölümden

Tüm LINQ sorgu işlemleri birbirinden farklı üç eylemden oluşur:

  1. Veri kaynağı elde edilir.

  2. Sorgu oluşturun.

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

Aşağıdaki örnek, sorgu işlemi üç bölümden kaynak kodunun nasıl ifade edilir gösterir.Örnek kolaylık sağlamak için bir veri kaynağı olarak bir tamsayı dizisini kullanır; Ancak, aynı kavramlar diğer veri kaynakları için de geçerlidir.Bu örnek, bu konunun geri kalan kısmı denir.

class IntroToLINQ
{        
    static void Main()
    {
        // The Three Parts of a LINQ Query:
        //  1. Data source.
        int[] numbers = new int[7] { 0, 1, 2, 3, 4, 5, 6 };

        // 2. Query creation.
        // numQuery is an IEnumerable<int>
        var numQuery =
            from num in numbers
            where (num % 2) == 0
            select num;

        // 3. Query execution.
        foreach (int num in numQuery)
        {
            Console.Write("{0,1} ", num);
        }
    }
}

Tam sorgu işlemi aşağıdaki çizimde gösterilmektedir.İçinde LINQ sorgu kendisi; farklı sorgu yürütme diğer bir deyişle, herhangi bir veri bir sorgu değişkeni oluşturarak alınan değil.

LINQ sorgu işlemini tamamlama

Veri kaynağı

Veri kaynağı bir dizi olduğundan önceki örnekte, dolaylı olarak genel desteklediği IEnumerable<T> arabirim.Bunu seçmeleri ile bu gerçeği anlamına gelir LINQ.Bir sorgu içinde yürütülen bir foreach deyimi, ve foreach gerektiren IEnumerable veya IEnumerable<T>. Destekleyen türleri IEnumerable<T> veya türetilmiş bir arabirim gibi genel IQueryable<T> adı verilen sorgulanabilir türleri.

Sorgulanabilir bir tür değişiklik ya da olarak hizmet verecek özel düzeltme gerektiren bir LINQ veri kaynağı.Kaynak veriler zaten sorgulanabilir bir tür olarak bellekte değilse, LINQ sağlayıcı gerekir göstermek, bu şekilde.Örneğin, LINQ to XML bir xml belgesi sorgulanabilir yükler XElement türü:

// Create a data source from an XML document.
// using System.Xml.Linq;
XElement 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 belirli bir tabloda veritabanı ve sorgu sonuç türünü temsil eden IQueryable<T>, türetilen IEnumerable<T>.

Northwnd db = new Northwnd(@"c:\northwnd.mdf");

// Query for customers in London.
IQueryable<Customer> custQuery =
    from cust in db.Customers
    where cust.City == "London"
    select cust;

Belirli tür veri kaynağı oluşturma hakkında daha fazla bilgi için çeşitli belgelerine bakın LINQ sağlayıcıları.Ancak, temel kural çok 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 bir LINQ veri kaynağı.Daha fazla bilgi için bkz. Nasıl yapılır: bir ArrayList LINQ ile sorgulama.

Sorgu

Sorgu veri kaynağı veya kaynakları almak için hangi bilgileri belirtir.İsteğe bağlı olarak, bir sorgunun nasıl bu bilgileri sıralanmış, gruplandırılmış ve onu döndürülmeden önce şeklinde belirtir.Bir sorguyu bir sorgu değişkeni içinde depolanan ve sorgu ifadesi ile başlatıldı.Sorguları yazmak daha kolay hale getirmek için C# yeni sorgu sözdizimi tanıttı.

Önceki örnekte sorguda tüm çift sayılar tamsayı diziden döndürür.Üç yan tümcelerini sorgu ifadesi içeriyor: from, where ve select.(sql ile hakkında bilginiz varsa, size yan tümcelerini sipariş siparişi SQL tersine, etmiş.) from Yan tümcesini belirtir veri kaynağı, where filtre yan tümcesi uygular ve select yan tümcesi döndürülen öğeler türünü belirtir.Bunlar ve diğer sorgu yan tümcelerini ayrıntılı olarak ele LINQ sorgu ifadelerini (C# Programlama Kılavuzu) bölüm.Şu an için en önemli nokta, yani LINQ, sorgu değişkeni hiçbir eylemde bulunmaz ve hiçbir veri döndürür.Yalnızca daha ileri noktada sorgu çalıştırıldığında sonuçları üretmek için gerekli olan bilgileri de depolar.Sorguları arka planda nasıl oluşturulur hakkında daha fazla bilgi için bkz: Standart sorgu işleçler genel bakış.

[!NOT]

Sorgular ayrıca yöntemi sözdizimini kullanarak ifade edilebilir.Daha fazla bilgi için bkz. LINQ'te Sorgu Sözdizimi ve Yöntem Sözdizimi (C#).

Sorgu yürütme

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

Daha öncede belirtildiği gibi sorgu değişkeni yalnızca sorgu komutları saklar.Gerçek yürütme sorgu sorgu değişkeni üzerinden yineleme kadar ertelenir bir foreach ifadesi.Bu kavram olarak adlandırılan programı Ertelenmiş yürütme ve aşağıdaki örnekte gösterilmiştir:

//  Query execution. 
foreach (int num in numQuery)
{
    Console.Write("{0,1} ", num);
}

foreach İfadesidir de sorgu sonuçları burada alınır.Örneğin, önceki sorguyu değişkeni içinde num döndürülen sırayla her değeri (birer birer) tutar.

Sorgu değişkeni sorgu sonuçlarını hiçbir zaman bulunduğundan, istediğiniz sıklıkta yürütebilirsiniz.Örneğin, ayrı bir uygulama tarafından sürekli olarak güncelleştirilen bir veritabanı olabilir.Uygulamanız, en son verileri alan bir sorgu oluşturabilir ve her seferinde farklı sonuçlar almak için bazı aralıklarla tekrar tekrar yürütebilir.

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

Kaynak öğe aralığı toplama işlevleri gerçekleştiren sorgular ilk öğeler üzerinde yineleme gerekir.Examples of such queries are Count, Max, Average, and First.Bunlar açık bir yürütme foreach deyimini sorgu kullanmanız gerekir çünkü foreach olan bir sonuca dönmek için.Ayrıca, bu tür sorgu, tek bir deðer döndürmemesine unutmayın bir IEnumerable koleksiyonu.Aşağıdaki sorgu kaynak dizi sayısı çift sayı verir:

var evenNumQuery = 
    from num in numbers
    where (num % 2) == 0
    select num;

int evenNumCount = evenNumQuery.Count();

Herhangi bir sorgu hemen bir yürütme zorlamak ve sonuçlarını önbelleğe almak için arayabileceğiniz ToList<TSource> veya ToArray<TSource> yöntemleri.

List<int> numQuery2 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToList();

// or like this:
// numQuery3 is still an int[]

var numQuery3 =
    (from num in numbers
     where (num % 2) == 0
     select num).ToArray();

Koyarak yürütme de zorunlu foreach hemen sonra sorgu ifadesi döngü.Ancak, çağıran tarafından ToList veya ToArray da tek koleksiyon nesnesindeki tüm verileri önbelleğe.

Ayrıca bkz.

Görevler

İzlenecek yol: Sorgular C# (LINQ) yazma

LINQ Örnekleri

Başvuru

foreach, başvurusu (C#)

Kavramlar

O/R Designer Overview

LINQ sorgu ifadelerini (C# Programlama Kılavuzu)

Diğer Kaynaklar

C# [NULL]'taki LINQ ile çalışmaya başlama

Sorgu anahtar sözcükler (C# Reference)

LINQ ve ertelenmiş yürütme Video