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

Operadores de partición LINQ Take & TakeWhile

El operador de partición divide la secuencia (colección) en dos partes y devuelve una de ellas.

Take

El método de extensión Take() devuelve una cantidad específica de elementos a partir del primer elemento.

IList<string> strList = new List<string>(){ "One", "Two", "Three", "Four", "Five" };
var newList = strList.Take(2);
foreach(var str in newList)
    Console.WriteLine(str);
Salida:
Uno
Dos

La sintaxis de consulta de C# no admite los operadores Take & takedwhile. Pero, puede usar Take en la variable de consulta/Método takedwhile, o envolver toda la consulta en paréntesis y luego llamar a Take/takedwhile ()

Dim takeResult = From s In studentList
                 Take 3
                 Select s

TakeWhile

El método de extensión TakeWhile() devuelve los elementos de la colección dada hasta que la condición especificada sea verdadera. Si el primer elemento no cumple con la condición, devuelve una colección vacía.

TakeWhile tiene dos sobrecargas de métodos. Una acepta un predicado de tipo Func<TSource, bool>, y otra sobrecarga acepta un predicado de tipo Func<TSource, int, bool> que pasa el tipo de índice del elemento.}

En el siguiente ejemplo, el método TakeWhile() devuelve un nuevo conjunto que contiene todos los elementos hasta que se encuentra un elemento de longitud menor que4caracteres.

Ejemplo: TakeWhile en C# devuelve cadenas de longitud mayor que4de elementos

IList<string> strList = new List<string>() { 
                                            "Tres", 
                                            "Cuatro", 
                                            "Cinco", 
                                            "Cien"};
var result = strList.TakeWhile(s => s.Length > 4);
foreach(string str in result)
        Console.WriteLine(str);
Salida:
Tres

En el ejemplo anterior, TakeWhile() devuelve solo el primer elemento, porque el segundo elemento de cadena no cumple con esta condición.

TakeWhile también pasa el índice del elemento actual a la función predicado. A continuación se muestra un ejemplo de TakeWhile que acepta elementos hasta que la longitud del elemento de cadena es mayor que su índice

Ejemplo: TakeWhile en C# pasa el índice, regresando elementos de cadena de longitud mayor que el índice
IList<string> strList = new List<string>() { 
                                            "Uno", 
                                            "Dos", 
                                            "Tres", 
                                            "Cuatro", 
                                            "Cinco", 
                                            "Seis"};
var resultList = strList.TakeWhile((s, i) => s.Length > i);
foreach(string str in resultList)
        Console.WriteLine(str);
Salida:
Uno
Dos
Tres
Cuatro