Aracılığıyla paylaş


Nasıl yapılır: C# İçinde LINQ Sorguları Yazma

Bu konu yazma üç yolu gösterilmektedir bir LINQ C# [NULL]'taki sorgu:

  1. Sorgu sözdizimini kullanın.

  2. Yöntemi sözdizimini kullanın.

  3. Sorgu sözdizimi ve yöntemi sözdiziminin bir birleşimini kullanın.

Aşağıdaki örnekler, bazı basit göstermektedir LINQ her bir yaklaşım kullanarak sorguları daha önce listelenen.Genel olarak, kuralı kullan (1) mümkün olan her durumda ve kullanımı (2) ve (3) gerektiğinde gelir.

[!NOT]

Bu sorgular, basit bellek içi koleksiyonlarıyla çalışır; Ancak, temel sözdizimi için kullanılan aynı LINQ - SQL ve LINQ - XML.

Örnek

Sorgu sözdizimi

Sorguların çoğu yazmak için önerilen yolu Sorgu sözdizimi oluşturmak için sorgu ifadelerini.Aşağıdaki örnek, üç sorgu ifadelerini gösterir.İlk sorgu ifadesi filtre veya koşullar uygulayarak sonuçları sınırlamak gösterilmiştir bir where yan tümcesi.Kaynak sıradaki değerleri 7 veya 3'ten büyük olan tüm öğeleri döndürür.İkinci ifade döndürülen sonuçları göstermektedir.Üçüncü ifade, Grup sonuçları anahtarına göre gösterilmiştir.Bu sorgu sözcüğün ilk harfini alarak iki grup döndürür.

// Query #1.
List<int> numbers = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

// The query variable can also be implicitly typed by using var
IEnumerable<int> filteringQuery =
    from num in numbers
    where num < 3 || num > 7
    select num;

// Query #2.
IEnumerable<int> orderingQuery =
    from num in numbers
    where num < 3 || num > 7
    orderby num ascending 
    select num;

// Query #3. 
string[] groupingQuery = { "carrots", "cabbage", "broccoli", "beans", "barley" };
IEnumerable<IGrouping<char, string>> queryFoodGroups =
    from item in groupingQuery
    group item by item[0];

Sorgu türü Not IEnumerable.Tüm bu sorgular kullanarak yazdırılamadı var aşağıdaki örnekte gösterildiği gibi:

var query = from num in numbers...

Sorgu değişkeni üzerinden yineleme kadar her önceki örnekte sorguları gerçekte yürütme bir foreach ifadesi.Daha fazla bilgi için bkz. LINQ Sorgularına Giriş (C#).

Yöntemi sözdiziminin

Bazı sorgu işlemleri bir yöntem çağrısı ifade gerekir.En sık karşılaşılan bu tür yöntemleri gibi singleton sayısal değerler döndürmek dosyaları Sum, Max, Min, Averageve benzeri.Tek bir değeri temsil eder ve ek sorgu işlemi için kaynak olarak hizmet veremiyor çünkü bu yöntemler her zaman en son herhangi bir sorguda çağrılmalıdır.Aşağıdaki örnek, bir sorgu ifadesinde yöntem çağrısı göstermektedir:

List<int> numbers1 = new List<int>() { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
List<int> numbers2 = new List<int>() { 15, 14, 11, 13, 19, 18, 16, 17, 12, 10 };
// Query #4. 
double average = numbers1.Average();

// Query #5.
IEnumerable<int> concatenationQuery = numbers1.Concat(numbers2);

Yöntem parametreleri varsa, bunlar biçiminde sağlanır bir lambda ifade, aşağıdaki örnekte gösterildiği gibi:

// Query #6.
IEnumerable<int> largeNumbersQuery = numbers2.Where(c => c > 15);

Önceki sorgularda, sorgu # 4 hemen yürütür.Bunun nedeni, tek bir değer ve bir genel verir IEnumerable koleksiyonu.Yöntemi kullanmak zorunda foreach değerini hesaplamak için.

Her bir önceki sorgu ile örtülü yazarak kullanılarak yazılabilir var, aşağıdaki örnekte gösterildiği gibi:

// var is used for convenience in these queries 
var average = numbers1.Average();
var concatenationQuery = numbers1.Concat(numbers2);
var largeNumbersQuery = numbers2.Where(c => c > 15);

Sorgu karma ve yöntemi sözdiziminin

Bu örnek, bir sorgu yan tümcesinde sonuçlarına yöntemi sözdiziminin nasıl gösterir.Yalnızca sorgu deyimi parantez içine alın ve sonra nokta operatörünü uygulanır ve yöntemini çağırın.Aşağıdaki örnekte, sorgu # 7 değeri 3 ile 7 arasında olan sayı sayısını döndürür.Genel olarak, ancak yöntem çağrısı sonucu depolamak için ikinci bir değişken kullanmak iyidir.Bu şekilde, sorgu sorgu sonuçlarını kafanız daha düşüktür.

// Query #7. 

// Using a query expression with method syntax 
int numCount1 =
    (from num in numbers1
     where num < 3 || num > 7
     select num).Count();

// Better: Create a new variable to store 
// the method call result
IEnumerable<int> numbersQuery =
    from num in numbers1
    where num < 3 || num > 7
    select num;

int numCount2 = numbersQuery.Count();

Tek bir değer ve bir toplama sorgusu # 7 verdiği için sorguyu hemen çalıştırır.

Önceki sorgu ile örtülü yazarak kullanılarak yazılabilir var, aşağıdaki gibi:

var numCount = (from num in numbers...

Bu yöntemi sözdiziminin aşağıdaki gibi yazılabilir:

var numCount = numbers.Where(n => n < 3 || n > 7).Count();

Açık, gibi yazmaya kullanılarak yazılabilir.

int numCount = numbers.Where(n => n < 3 || n > 7).Count();

Ayrıca bkz.

Görevler

İzlenecek yol: C#'de Sorgu Yazma (LINQ)

Başvuru

where tümcesi (C# Başvurusu)

Kavramlar

LINQ Sorgu İfadeleri (C# Programlama Kılavuzu)

Diğer Kaynaklar

LINQ (Dil ile Tümleşik Sorgu)