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

Операторы разделения LINQ Take и TakeWhile

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

Take

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

IList<string> strList = new List<string>(){ "One", "Two", "Three", "Four", "Five" };
var newList = strList.Take(2);
foreach(var str in newList)
    Console.WriteLine(str);
Вывод:
Один
Два

Синтаксис запросов C# не поддерживает операторы Take и TakeWhile. Однако, вы можете использовать методы Take/takedwhile для переменных запроса или поместить весь запрос в скобки, а затем вызвать Take/takedwhile ().

Dim takeResult = From s In studentList
                 Take 3
                 Выбрать s

TakeWhile

Метод расширения TakeWhile() возвращает элементы заданного набора, пока指定的 условие не станет истинным. Если первый элемент сам не удовлетворяет условию, то возвращается пустой набор.

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

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

Пример: метод TakeWhile в C# возвращает элементы строки с длиной больше 4

IList<string> strList = new List<string>() { 
                                            "Три", 
                                            "Четыре", 
                                            "Пять", 
                                            "Сотня"};
var result = strList.TakeWhile(s => s.Length > 4);
foreach(string str in result)
        Console.WriteLine(str);
Вывод:
Три

В предыдущем примере TakeWhile() возвращает набор, содержащий только первый элемент, так как второй строковый элемент не satisfies это условие.

TakeWhile также передает текущий индекс в функции предиката. В следующем примере TakeWhile метод принимает элементы, пока длина строки-элемента больше ее индекса

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