Verileri bölümleme (C#)
LINQ'de bölümleme, öğeleri yeniden düzenlemeden ve sonra bölümlerden birini döndürmeden bir giriş dizisini iki bölüme bölme işlemini ifade eder.
Önemli
Bu örnekler bir System.Collections.Generic.IEnumerable<T> veri kaynağı kullanır. Veri kaynaklarını ve ifade ağaçlarını System.Linq.IQueryProviderkullanan System.Linq.IQueryable<T> veri kaynakları. İfade ağaçlarının izin verilen C# söz diziminde sınırlamaları vardır. Ayrıca EF Core gibi her IQueryProvider
veri kaynağı daha fazla kısıtlama uygulayabilir. Veri kaynağınızın belgelerine bakın.
Aşağıdaki çizimde, bir dizi karakter üzerinde üç farklı bölümleme işleminin sonuçları gösterilmektedir. İlk işlem, dizideki ilk üç öğeyi döndürür. İkinci işlem ilk üç öğeyi atlar ve kalan öğeleri döndürür. Üçüncü işlem, dizideki ilk iki öğeyi atlar ve sonraki üç öğeyi döndürür.
Dizileri bölümleyen standart sorgu işleç yöntemleri aşağıdaki bölümde listelenmiştir.
İşleçler
Yöntem adları | Açıklama | C# sorgu ifadesi söz dizimi | Daha Fazla Bilgi |
---|---|---|---|
Atla | Öğeleri bir dizide belirtilen konuma kadar atlar. | Uygulanamaz. | Enumerable.Skip Queryable.Skip |
Skipwhile | Bir öğe koşulu karşılamayana kadar koşul işlevini temel alan öğeleri atlar. | Uygulanamaz. | Enumerable.SkipWhile Queryable.SkipWhile |
Take | Öğeleri bir dizide belirtilen konuma kadar alır. | Uygulanamaz. | Enumerable.Take Queryable.Take |
Takewhile | Bir öğe koşulu karşılamayana kadar koşul işlevini temel alan öğeleri alır. | Uygulanamaz. | Enumerable.TakeWhile Queryable.TakeWhile |
Öbek | Bir dizinin öğelerini belirtilen en büyük boyuttaki öbeklere böler. | Uygulanamaz. | Enumerable.Chunk Queryable.Chunk |
Aşağıdaki örneklerin tümü, 0 ile 7 arasında bir sayı dizisi oluşturmak için kullanılır Enumerable.Range(Int32, Int32) .
Bir dizideki Take
yalnızca ilk öğeleri almak için yöntemini kullanırsınız:
foreach (int number in Enumerable.Range(0, 8).Take(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
Bir dizideki Skip
ilk öğeleri atlamak için yöntemini ve kalan öğeleri kullanırsınız:
foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7
TakeWhile
ve SkipWhile
yöntemleri de bir dizideki öğeleri alır ve atlar. Ancak, bu yöntemler belirli sayıda öğe yerine bir koşula göre öğeleri atlar veya alır. TakeWhile
bir öğe koşulla eşleşmeyene kadar bir dizinin öğelerini alır.
foreach (int number in Enumerable.Range(0, 8).TakeWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
// 3
// 4
SkipWhile
koşul true olduğu sürece ilk öğeleri atlar. Koşulla eşleşmeyen ilk öğe ve sonraki tüm öğeler döndürülür.
foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7
Chunk
işleci, belirli size
bir temelinde bir dizinin öğelerini bölmek için kullanılır.
int chunkNumber = 1;
foreach (int[] chunk in Enumerable.Range(0, 8).Chunk(3))
{
Console.WriteLine($"Chunk {chunkNumber++}:");
foreach (int item in chunk)
{
Console.WriteLine($" {item}");
}
Console.WriteLine();
}
// This code produces the following output:
// Chunk 1:
// 0
// 1
// 2
//
//Chunk 2:
// 3
// 4
// 5
//
//Chunk 3:
// 6
// 7
Yukarıdaki C# kodu:
- Bir sayı dizisi oluşturmaya dayanır Enumerable.Range(Int32, Int32) .
- İşleci uygular
Chunk
ve sırayı en büyük boyutu üç olan öbeklere böler.