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 İfadeleri
Sorgu ifadeleri, koleksiyonları sorgulamak System.Collections.Generic.IEnumerable<T> için SQL veya XQuery'ye benzer bildirim temelli bir söz dizimi kullanır. Derleme zamanında sorgu söz dizimi, LINQ sağlayıcısının standart sorgu yöntemlerini uygulamasına yönelik yöntem çağrılarına dönüştürülür. Uygulamalar, bir using
yönergeyle uygun ad alanını belirterek kapsamdaki standart sorgu işleçlerini denetler. Aşağıdaki sorgu ifadesi bir dizi dize 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;
Örtük Olarak Yazılan Değişkenler (var)
var değiştiricisini kullanarak derleyiciye türü çıkarmasını ve atamasını bildirebilirsiniz, burada gösterildiği gibi:
var number = 5;
var name = "Virginia";
var query = from str in stringArray
where str[0] == 'm'
select str;
olarak var
bildirilen değişkenler, türünü açıkça belirttiğiniz değişkenler gibi kesin olarak yazılır. kullanımı var
anonim türler oluşturmayı mümkün kılar, ancak yalnızca yerel değişkenler için. Daha fazla bilgi için Örtük Olarak Yazılan Yerel Değişkenler bölümüne bakın.
Nesne ve Koleksiyon Başlatıcıları
Nesne ve koleksiyon başlatıcıları, nesne için bir oluşturucuyu açıkça çağırmadan nesneleri başlatmayı mümkün hale getirir. Başlatıcılar genellikle kaynak verileri yeni bir veri türüne yansıttığında sorgu ifadelerinde kullanılır. public Customer
ve Name
properties ile adlı Phone
bir sınıf varsayıldığında, nesne başlatıcı aşağıdaki kodda olduğu gibi kullanılabilir:
var cust = new Customer { Name = "Mike", Phone = "555-1212" };
Sınıfınız Customer
ile devam ederken, IncomingOrders
adlı bir veri kaynağı olduğunu ve büyük OrderSize
olan her bir sipariş için, o siparişe dayanarak yeni bir Customer
oluşturmak istediğinizi varsayalım. LinQ sorgusu bu veri kaynağında yürütülebilir ve bir koleksiyonu doldurmak için nesne başlatmayı kullanabilir:
var newLargeOrderCustomers = from o in IncomingOrders
where o.OrderSize > 5
select new Customer { Name = o.Name, Phone = o.Phone };
Veri kaynağı, gibi Customer
sınıfından OrderSize
daha fazla özelliğe sahip olabilir, ancak nesne başlatma ile sorgudan döndürülen veriler istenen veri türüne kalıplanır; sınıfınızla ilgili verileri seçersiniz. Sonuç olarak, artık istediğiniz yeni System.Collections.Generic.IEnumerable<T>lerle dolu bir Customer
ye sahipsiniz. Yukarıdaki örnek LINQ yönteminin söz diziminde de yazılabilir:
var newLargeOrderCustomers = IncomingOrders.Where(x => x.OrderSize > 5).Select(y => new Customer { Name = y.Name, Phone = y.Phone });
C# 12 ile başlayarak, bir koleksiyonu başlatmak için bir koleksiyon ifadesi kullanabilirsiniz.
Daha fazla bilgi için bakınız:
Anonim Türler
Derleyici anonim bir tür oluşturur. Tür adı yalnızca derleyici tarafından kullanılabilir. Anonim türler, ayrı bir adlandırılmış tür tanımlamak zorunda kalmadan sorgu sonucunda bir özellik kümesini geçici olarak gruplandırmak için kullanışlı bir yol sağlar. Anonim türler, burada gösterildiği gibi yeni bir ifade ve nesne başlatıcı ile başlatılır:
select new {name = cust.Name, phone = cust.Phone};
C# 7 ile başlayarak, adsız türler oluşturmak için tanımlama kümeleri kullanabilirsiniz.
Uzantı Metotları
Uzantı yöntemi bir türle ilişkilendirilebilen statik bir yöntemdir, böylece türdeki bir örnek yöntemiymiş gibi çağrılabilir. Bu özellik, mevcut türlerde değişiklik yapmadan yeni yöntemleri "eklemenizi" sağlar. Standart sorgu işleçleri, IEnumerable<T>'yı her türde uygulayan LINQ sorgu işlevselliği sağlayan uzantı yöntemleri kümesidir.
Lambda İfadeleri
Lambda ifadeleri, giriş parametrelerini işlev gövdesinden ayırmak için işlecini =>
kullanan ve derleme zamanında temsilciye veya ifade ağacına dönüştürülebilen bir satır içi işlevdir. LINQ programlamada, standart sorgu işleçlerine doğrudan yöntem çağrıları yaptığınızda lambda ifadeleriyle karşılaşırsınız.
Veri olarak ifadeler
Sorgu nesneleri birleştirilebilir, yani bir yöntemden sorgu döndürebilirsiniz. Sorguları temsil eden nesneler, sonuçta elde edilen koleksiyonu değil, gerektiğinde sonuçları üretme adımlarını depolar. Yöntemlerden sorgu nesnelerini döndürmenin avantajı, daha fazla oluşturulabilmesi veya değiştirilmeleridir. Bu nedenle, sorgu döndüren bir yöntemin herhangi bir dönüş değeri veya out
parametresi de bu türe sahip olmalıdır. Bir yöntem sorguyu somut List<T> bir türe veya Array türe dönüştürüyorsa, sorgunun kendisi yerine sorgu sonuçlarını döndürür. Bir yöntemden döndürülen sorgu değişkeni yine de oluşturulabilir veya değiştirilebilir.
Aşağıdaki örnekte, ilk yöntem QueryMethod1
bir sorguyu dönüş değeri olarak, ikinci yöntem QueryMethod2
ise bir sorguyu parametre olarak out
döndürür (returnQ
örnekte). Her iki durumda da döndürülen, sorgu sonuçları değil, bizzat sorgunun kendisidir.
IEnumerable<string> QueryMethod1(int[] ints) =>
from i in ints
where i > 4
select i.ToString();
void QueryMethod2(int[] ints, out IEnumerable<string> returnQ) =>
returnQ = from i in ints
where i < 4
select i.ToString();
int[] nums = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ];
var myQuery1 = QueryMethod1(nums);
Sorgu myQuery1
aşağıdaki foreach döngüsünde yürütülür.
foreach (var s in myQuery1)
{
Console.WriteLine(s);
}
Türünü görmek için myQuery1
üzerinde fare işaretçisini bekletin.
Ayrıca, QueryMethod1
kullanılmadan, myQuery1
öğesinden döndürülen sorguyu doğrudan yürütebilirsiniz.
foreach (var s in QueryMethod1(nums))
{
Console.WriteLine(s);
}
Çağrının dönüş türünü görmek için fare işaretçisini QueryMethod1
üzerinde bekletin.
QueryMethod2
parametresinin out
değeri olarak bir sorgu döndürür:
QueryMethod2(nums, out IEnumerable<string> myQuery2);
// Execute the returned query.
foreach (var s in myQuery2)
{
Console.WriteLine(s);
}
Sorgu oluşturma kullanarak bir sorguyu değiştirebilirsiniz. Bu durumda, yeni bir sorgu nesnesi oluşturmak için önceki sorgu nesnesi kullanılır. Bu yeni nesne, özgün sorgu nesnesinden farklı sonuçlar döndürür.
myQuery1 = from item in myQuery1
orderby item descending
select item;
// Execute the modified query.
Console.WriteLine("\nResults of executing modified myQuery1:");
foreach (var s in myQuery1)
{
Console.WriteLine(s);
}