English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Операторы разделения LINQ Skip & SkipWhile

Операторы разделения разбивают последовательность (множество) на две части и возвращают одну из них.

МетодОписание
Skip

Начинать с первого элемента последовательности и прыгать до указанного положения.

SkipWhile

Пропуск элементов по условиям до тех пор, пока элементы не будут соответствовать условиям. Если первый элемент сам не соответствует условиям, то он пропустит 0 элементов и вернёт все элементы последовательности.

Take

Начинать с первого элемента последовательности и перемещать элементы до указанного положения.

TakeWhile

Возврат элементов из первого элемента до тех пор, пока элементы не будут соответствовать условиям. Если первый элемент сам не соответствует условиям, то возвращается пустой набор.

Skip

Метод Skip() пропускает указанное количество элементов от первого элемента и возвращает оставшиеся элементы.

IList<string> strList = new List<string>{ "One", "Two", "Three", "Four", "Five" };
var newList = strList.Skip(2);
foreach (var str in newList)
    Console.WriteLine(str);
Вывод:
Третий
Четвертый
Пятый

Оператор Skip в синтаксисе запроса

Синтаксис запроса C# не поддерживает операторы Skip & SkipWhile. Однако вы можете использовать методы Skip/SkipWhile для переменных запроса или 包装ить весь запрос в скобки, а затем вызвать Skip/SkipWhile.

Следующий пример демонстрирует оператор skip в синтаксисе запроса - версия VB.NET

Dim skipResult = From s In studentList
                 Skip 3
                 Выберите s

SkipWhile

Как следует из названия, расширяемый метод SkipWhile() в LINQ пропускает элементы в集合е до тех пор, пока условие не станет true. Как только любое из условий элементов станет false, он возвращает новый набор всех оставшихся элементов.

Метод SkipWhile() имеет два overload-а. Один принимает предикат типа Func<TSource, bool>, а другой overload принимает предикат типа Func<TSource, int, bool> через индекс элемента.

В следующем примере метод SkipWhile() пропускает все элементы до тех пор, пока не найдет строку с длиной, равной или больше 4 символов.

Пример: метод SkipWhile() в C# пропускает элементы с длиной меньше 4 и возвращает все следующие элементы

IList<string> strList = new List<string>() { 
                                            "Один" 
                                            "Два" 
                                            "Третий" 
                                            "Четвертый" 
                                            "Пятый" 
                                            "Шестой"
var resultList = strList.SkipWhile(s => s.Length < 4);
foreach(string str in resultList)
        Console.WriteLine(str);
Вывод:
Третий
Четвертый
Пятый
Шестой

В предыдущем примере, так как длина первых двух элементов меньше 3, поэтому SkipWhile () пропускает первые два элемента и находит третий элемент с длиной, равной или больше 4. Как только находит элемент с длиной, равной или больше 4 символов, он не пропускает другие элементы, даже если они меньше 4 символов.

Теперь, посмотрите на следующий пример, в котором SkipWhile () не пропускает هیچ элемента, потому что условие первого элемента равно false.

IList<string> strList = new List<string>() { 
                                            "Третий" 
                                            "Один" 
                                            "Два" 
                                            "Четвертый" 
                                            "Пятый" 
                                            "Шестой"
var resultList = strList.SkipWhile(s => s.Length < 4);
foreach(string str in resultList)
        Console.WriteLine(str);
Вывод:
Третий
Один
Два
Четвертый
Пятый
Шестой

Второй параметр overload SkipWhile передаёт индекс каждого элемента. Вот пример

Пример: Использование метода SkipWhile() в C#
IList<string> strList = new List<string>() { 
                                            "Один" 
                                            "Два" 
                                            "Третий" 
                                            "Четвертый" 
                                            "Пятый" 
                                            "Шестой"
var result = strList.SkipWhile((s, i) => s.Length > i);
foreach(string str in result)
    Console.WriteLine(str);
Вывод:
Пятый
Шестой

В примере выше лямбда-выражение включает элемент и индекс элемента в качестве параметров. Оно пропускает все элементы, пока длина строки-элемента больше, чем индекс.

Оператор SkipWhile в синтаксисе запроса

Синтаксис запросов C# не поддерживает операторы Skip & SkipWhile. Однако, вы можете использовать методы Skip/SkipWhile для переменных запроса или 包装 весь запрос в скобки и затем вызывать Skip/SkipWhile ().

Пример: Метод SkipWhile в VB.Net
Dim strList = New List(Of string) From {
                                        "Один" 
                                        "Два" 
                                        "Третий" 
                                        "Четвертый" 
                                        "Пятый" 
                                        "Шестой"
Dim skipWhileResult = From s In studentList
                      Пропустите While s.Length < 4
                      Выберите s
Вывод:
Третий
Четвертый
Пятый
Шестой