Temel LINQ Sorgu İşlemleri (C#)
Bu konu, LINQ sorgu ifadelerine ve bir sorguda gerçekleştirilen tipik işlem türlerinde kısa bir giriş sağlar. Daha ayrıntılı bilgiler aşağıdaki konulardadır:
Standart Sorgu İşleçlere Genel Bakış (C#)
Adım adım kılavuz: C'de Sorgu Yazma #
Not
SQL veya XQuery gibi bir sorgu dilini zaten biliyorsanız, bu konunun çoğunu atlayabilirsiniz. LINQ sorgu ifadelerinde yan tümcelerin sırası hakkında bilgi edinmek için sonraki bölümde yer alan " from yan tümcesi" hakkında bilgi edinebilirsiniz.
Bir Veri Kaynağı Elde Etme
LINQ sorgusunda ilk adım veri kaynağını belirtmek olacak. Çoğu programlama dilinde olduğu gibi C# dilinde de bir değişkenin kullanılamadan önce bildir olması gerekir. LinQ sorgusunda yan tümcesi ilk olarak veri kaynağını ( ) ve from aralık değişkenlerini ( customers ) tanıtmak için gelir. cust
//queryAllCustomers is an IEnumerable<Customer>
var queryAllCustomers = from cust in customers
select cust;
Aralık değişkeni, bir sorgu ifadesinde gerçek yineleme oluşmadan foreach döngüde yineleme değişkenine benzer. Sorgu yürütülürken, aralık değişkeni içinde birbirini takip eden her öğeye başvuru olarak görev customers yapacaktır. Derleyici, türünü çıkarana kadar cust açıkça belirtmeniz gerekmez. Ek aralık değişkenleri bir yan tümcesi ile let tanıt olabilir. Daha fazla bilgi için bkz. let yan tümcesi.
Not
gibi genel olmayan veri kaynakları için ArrayList aralık değişkeninin açıkça yazması gerekir. Daha fazla bilgi için bkz. LINQ (C#) ve from yan tümcesi ile ArrayList sorgulama.
Filtreleme
Büyük olasılıkla en yaygın sorgu işlemi, Boole ifadesi şeklinde bir filtre uygulamaktır. Filtre, sorgunun yalnızca ifadenin true olduğu öğeleri dönmesine neden olur. Sonuç, yan tümcesi kullanılarak where üretir. Geçerli filtre, kaynak diziden hangi öğelerin hariç tutulacaklarını belirtir. Aşağıdaki örnekte yalnızca customers Londra'da adresi olanlar döndürülür.
var queryLondonCustomers = from cust in customers
where cust.City == "London"
select cust;
Yan tümcesinde gereken sayıda filtre ifadesi uygulamak için tanıdık C# mantıksal AND OR ve işleçlerini where kullanabilirsiniz. Örneğin, yalnızca "Londra" olan ve adı AND "Olarak" olan müşterileri iade etmek için aşağıdaki kodu yazabilirsiniz:
where cust.City == "London" && cust.Name == "Devon"
Londra veya Paris'ten müşterileri iade etmek için aşağıdaki kodu yazarnız:
where cust.City == "London" || cust.City == "Paris"
Daha fazla bilgi için bkz. where yan tümcesi.
Sıralama
Döndürülen verileri sıralamak genellikle kullanışlıdır. yan orderby tümcesi, döndürülen dizide yer alan öğelerin sıralanmış tür için varsayılan karşıt değere göre sıralanmış olmasına neden olur. Örneğin, aşağıdaki sorgu sonuçları özelliğine göre sıralamak için Name genişletilmiş olabilir. bir Name dize olduğundan, varsayılan karşılaştırıldığında A'dan Z'ye alfabetik bir sıralama gerçekleştirir.
var queryLondonCustomers3 =
from cust in customers
where cust.City == "London"
orderby cust.Name ascending
select cust;
Sonuçları ters sırada sıralamak için Z'den A'ya yan tümcesini orderby…descending kullanın.
Daha fazla bilgi için bkz. orderby yan tümcesi.
Gruplandırma
yan group tümcesi, sonuçlarınızı belirttiğiniz anahtara göre gruplamanızı sağlar. Örneğin, Londra veya Paris'teki tüm müşterilerin tek tek gruplarda olması için sonuçların ile grup City halinde gruplandır gerektiğini belirtesiniz. Bu durumda cust.City anahtardır.
// queryCustomersByCity is an IEnumerable<IGrouping<string, Customer>>
var queryCustomersByCity =
from cust in customers
group cust by cust.City;
// customerGroup is an IGrouping<string, Customer>
foreach (var customerGroup in queryCustomersByCity)
{
Console.WriteLine(customerGroup.Key);
foreach (Customer customer in customerGroup)
{
Console.WriteLine(" {0}", customer.Name);
}
}
Bir sorguyu yan tümcesi group ile bitirince sonuçlarınız liste listesi şeklinde olur. Listede yer alan her öğe, üyesi olan bir nesnedir ve bu Key anahtar altında gruplu öğeler listesidir. Bir grup dizisi üreten bir sorguyu tekrarlarken, iç içe geçmiş bir döngü foreach kullanabilirsiniz. Dış döngü her grup üzerinde tekrarlar ve iç döngü her grubun üyeleri üzerinde tekrarlar.
Grup işlemi sonuçlarına başvurarak daha fazla sorgulan bir tanımlayıcı oluşturmak into için anahtar sözcüğünü kullanabilirsiniz. Aşağıdaki sorgu yalnızca ikiden fazla müşteri içeren grupları döndürür:
// custQuery is an IEnumerable<IGrouping<string, Customer>>
var custQuery =
from cust in customers
group cust by cust.City into custGroup
where custGroup.Count() > 2
orderby custGroup.Key
select custGroup;
Daha fazla bilgi için bkz. group yan tümcesi.
Katma
Birleştirme işlemleri, veri kaynaklarında açıkça model olmayan diziler arasında ilişkilendirmeler oluşturun. Örneğin, aynı konuma sahip tüm müşterileri ve dağıtımcıları bulmak için bir birleşim gerçekleştirebilirsiniz. LINQ'te join yan tümcesi her zaman doğrudan veritabanı tabloları yerine nesne koleksiyonlarına karşı çalışır.
var innerJoinQuery =
from cust in customers
join dist in distributors on cust.City equals dist.City
select new { CustomerName = cust.Name, DistributorName = dist.Name };
LINQ'te, LINQ'te yabancı anahtarlar bir öğe koleksiyonu SQL özellikleri olarak temsil edildikleri için LINQ'de bunu aynı sıklıkta kullanmak zorunda join değildir. Örneğin, bir Customer nesne bir nesne koleksiyonu Order içerir. Birleştirme gerçekleştirmek yerine, nokta notasyonu kullanarak siparişlere erişebilirsiniz:
from order in Customer.Orders...
Daha fazla bilgi için bkz. join yan tümcesi.
Seçme (Tahminler)
yan select tümcesi sorgunun sonuçlarını üretir ve döndürülen her öğenin "şeklini" veya türünü belirtir. Örneğin, sonuçlarınız tam nesnelerden mi, yalnızca bir üyeden mi, üye alt kümesinden mi yoksa hesaplamaya veya yeni nesne oluşturmaya göre tamamen farklı bir sonuç türünden mi Customer oluşturulacak? yan select tümcesi kaynak öğenin kopyası dışında bir şey ürettiğinde, işlem projeksiyon olarak çağrılır. Verileri dönüştürmek için projeksiyonların kullanımı, LINQ sorgu ifadelerinin güçlü bir özelliğidir. Daha fazla bilgi için bkz. LINQ (C#) ile Veri Dönüştürmeleri ve select yan tümcesi.