Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Partycjonowanie w LINQ odnosi się do operacji dzielenia sekwencji danych wejściowych na dwie sekcje, bez zmieniania układu elementów, a następnie zwracania jednej z sekcji.
Ważne
Te przykłady korzystają ze źródła danych System.Collections.Generic.IEnumerable<T>. Źródła danych oparte na System.Linq.IQueryProvider używają źródeł danych System.Linq.IQueryable<T> i drzew wyrażeń . Drzewa wyrażeń mają ograniczenia w dozwolonej składni języka C#. Ponadto każde źródło danych IQueryProvider, takie jak EF Core, może nakładać więcej ograniczeń. Zapoznaj się z dokumentacją źródła danych.
Poniższa ilustracja przedstawia wyniki trzech różnych operacji partycjonowania na sekwencji znaków. Pierwsza operacja zwraca pierwsze trzy elementy w sekwencji. Druga operacja pomija pierwsze trzy elementy i zwraca pozostałe elementy. Trzecia operacja pomija pierwsze dwa elementy w sekwencji i zwraca następne trzy elementy.
Standardowe metody operatorów zapytań, które dzielą sekwencje, są wymienione w poniższej sekcji.
Operatorów
| Nazwy metod | Opis | Składnia wyrażeń zapytań języka C# | Więcej informacji |
|---|---|---|---|
| Pomiń | Pomija elementy aż do określonej pozycji w sekwencji. | Nie dotyczy. | Enumerable.Skip Queryable.Skip |
| SkipWhile | Pomija elementy na podstawie funkcji predykatu, dopóki element nie spełnia warunku. | Nie dotyczy. | Enumerable.SkipWhile Queryable.SkipWhile |
| Weź | Bierze elementy do określonej pozycji w sekwencji. | Nie dotyczy. | Enumerable.Take Queryable.Take |
| PobierzDopóki | Pobiera elementy na podstawie funkcji predykatu, dopóki element nie spełnia warunku. | Nie dotyczy. | Enumerable.TakeWhile Queryable.TakeWhile |
| Fragment | Dzieli elementy sekwencji na fragmenty określonego maksymalnego rozmiaru. | Nie dotyczy. | Enumerable.Chunk Queryable.Chunk |
Wszystkie poniższe przykłady służą Enumerable.Range(Int32, Int32) do generowania sekwencji liczb z zakresu od 0 do 7.
Uwaga / Notatka
Typowe źródła danych dla tego obszaru można znaleźć w artykule Omówienie standardowych operatorów zapytań .
Używasz metody Take do pobierania tylko pierwszych elementów z sekwencji.
foreach (int number in Enumerable.Range(0, 8).Take(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 0
// 1
// 2
Używasz metody Skip, aby pominąć pierwsze elementy w sekwencji i korzystać z pozostałych elementów.
foreach (int number in Enumerable.Range(0, 8).Skip(3))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 3
// 4
// 5
// 6
// 7
Metody TakeWhile i SkipWhile również przyjmują i pomijają elementy w sekwencji. Jednak zamiast zestawu elementów te metody pomijają lub przyjmują elementy na podstawie warunku.
TakeWhile pobiera elementy sekwencji, dopóki element nie jest zgodny z warunkiem.
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 Pomija pierwsze elementy, dopóki warunek jest prawdziwy. Zwracany jest pierwszy element, który nie pasuje do warunku, a wszystkie kolejne elementy.
foreach (int number in Enumerable.Range(0, 8).SkipWhile(n => n < 5))
{
Console.WriteLine(number);
}
// This code produces the following output:
// 5
// 6
// 7
Operator Chunk służy do dzielenia elementów sekwencji na podstawie danego sizeelementu .
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
Poprzedni kod języka C#:
- Polega na Enumerable.Range(Int32, Int32), aby wygenerować sekwencję liczb.
- Stosuje się operator
Chunk, dzieląc sekwencję na fragmenty o maksymalnym rozmiarze trzech elementów.