LINQ'i Destekleyen C# Özellikleri

Aşağıdaki bölümde C# 3,0 ' de tanıtılan yeni dil yapıları tanıtılmaktadır. Bu yeni özelliklerin tümü LINQ sorgularıyla bir dereceye kadar kullanılsa da, LINQ ile sınırlı değildir ve yararlı bulduğunuz herhangi bir bağlamda kullanılabilir.

Sorgu İfadeleri

sorgu ifadeleri, ıenumerable koleksiyonlarını sorgulamak için SQL veya XQuery ile benzer bir bildirime dayalı sözdizimi kullanır. Derleme zamanı sorgu söz dizimi, bir LINQ sağlayıcısının standart sorgu işleci genişletme yöntemlerinin uygulamasına yönelik yöntem çağrılarına dönüştürülür. Uygulamalar, uygun ad alanını bir yönergeyle belirterek kapsamdaki standart sorgu işleçlerini denetler using . Aşağıdaki sorgu ifadesi bir dize dizisi alır, bunları dizedeki ilk karaktere göre gruplandırır ve grupları sıralar.

var query = from str in stringArray
            group str by str[0] into stringGroup
            orderby stringGroup.Key
            select stringGroup;

Daha fazla bilgi için bkz. LINQ sorgu ifadeleri.

Örtük olarak yazılan değişkenler (var)

Bir değişkeni bildirdiğinizde ve başlattığınızda açıkça bir tür belirtmek yerine, derleyicinin türü çıkarması ve atamasını bildirmek için, burada gösterildiği gibi var değiştiricisini kullanabilirsiniz:

var number = 5;
var name = "Virginia";
var query = from str in stringArray
            where str[0] == 'm'
            select str;

Olarak belirtilen değişkenler var , türü açıkça belirttiğiniz değişkenler olarak kesin şekilde türdedir. Öğesinin kullanımı var anonim türler oluşturmayı mümkün kılar, ancak yalnızca yerel değişkenler için kullanılabilir. Diziler, örtük yazma ile de bildirilemez.

Daha fazla bilgi için bkz. örtülü olarak yazılan yerel değişkenler.

Nesne ve Koleksiyon Başlatıcıları

Nesne ve koleksiyon başlatıcıları nesne için bir oluşturucu açıkça çağrılmadan nesneleri başlatmayı mümkün hale getirir. Başlatıcılar, genellikle, kaynak verileri yeni bir veri türüne proje yaparken sorgu ifadelerinde kullanılır. Public ve Properties ile adlandırılmış bir sınıf varsayıldığında Customer Name Phone , nesne Başlatıcısı aşağıdaki kodda olduğu gibi kullanılabilir:

var cust = new Customer { Name = "Mike", Phone = "555-1212" };

Sınıfımızla devam ederek, Customer adlı bir veri kaynağı olduğunu IncomingOrders ve her sıra büyük bir sipariş için bu OrderSize sırada yeni bir temel oluşturmak istiyoruz Customer . Bir LINQ sorgusu bu veri kaynağında yürütülebilir ve bir koleksiyonu doldurarak nesne başlatma işlemi kullanılabilir:

var newLargeOrderCustomers = from o in IncomingOrders
                            where o.OrderSize > 5
                            select new Customer { Name = o.Name, Phone = o.Phone };

Veri kaynağı, gibi bir sınıftan çok daha fazla özelliğe sahip olabilir Customer OrderSize , ancak nesne başlatma ile sorgudan döndürülen veriler istenen veri türüne kopyalanır; sınıfımızla ilgili verileri seçiyoruz. Sonuç olarak, şimdi IEnumerable Customer yaptığımız yeni s 'leri doldurduk. Yukarıdaki, LINQ yöntem sözdiziminde de yazılabilir:

var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select(y => new Customer { Name = y.Name, Phone = y.Phone });

Daha fazla bilgi için bkz.

Anonim Türler

Anonim bir tür derleyici tarafından oluşturulur ve tür adı yalnızca derleyici tarafından kullanılabilir. Anonim türler, farklı bir adlandırılmış tür tanımlamak zorunda kalmadan bir özellik kümesini geçici olarak bir sorgu sonucuyla gruplamak için kullanışlı bir yol sağlar. Anonim türler aşağıda gösterildiği gibi yeni bir ifadeyle ve bir nesne başlatıcısıyla başlatılır:

select new {name = cust.Name, phone = cust.Phone};

Daha fazla bilgi için bkz. anonim türler.

Uzantı Metotları

Uzantı yöntemi, bir tür ile ilişkilendirilebilen statik bir yöntemdir ve bu sayede tür üzerinde bir örnek yöntemi gibi çağrılabilir. Bu özellik, etkin bir şekilde, var olan türlere "Ekle" gibi yeni yöntemler eklemenizi sağlar. Standart sorgu işleçleri, uygulayan herhangi bir tür için LINQ sorgu işlevselliği sağlayan bir genişletme yöntemleri kümesidir IEnumerable<T> .

Daha fazla bilgi için bkz. Uzantı yöntemleri.

Lambda İfadeleri

Lambda ifadesi, => işlev gövdesinden giriş parametrelerini ayırmak için işlecini kullanan ve derleme zamanında bir temsilciye veya bir ifade ağacına dönüştürülebilen bir satır içi işlevdir. LINQ programlamada, standart sorgu işleçleri için doğrudan Yöntem çağrıları yaptığınızda lambda ifadeleriyle karşılaşırsınız.

Daha fazla bilgi için bkz.

Ayrıca bkz.