Filtrar datos en C# con LINQ
El filtrado hace referencia a la operación de restringir el conjunto de resultados, de manera que solo contenga los elementos que cumplen una condición especificada. También se conoce como seleccionar elementos que coinciden con la condición especificada.
Importante
Estos ejemplos usan un origen de datos de System.Collections.Generic.IEnumerable<T>. Los orígenes de datos basados en System.Linq.IQueryProvider usan orígenes de datos de System.Linq.IQueryable<T> y árboles de expresiones. Los árboles de expresiones tienen limitaciones en la sintaxis permitida de C#. Además, cada origen de datos de IQueryProvider
, como EF Core puede imponer más restricciones. Compruebe la documentación del origen de datos.
En la ilustración siguiente se muestran los resultados de filtrar una secuencia de caracteres. El predicado de la operación de filtrado especifica que el carácter debe ser "A".
Los métodos del operador de consulta estándar que realizan selecciones se indican en la sección siguiente.
Nombre del método | Descripción | Sintaxis de la expresión de consulta de C# | Más información |
---|---|---|---|
OfType | Selecciona valores en función de su capacidad para convertirse en un tipo especificado. | No es aplicable. | Enumerable.OfType Queryable.OfType |
Where | Selecciona valores basados en una función de predicado. | where |
Enumerable.Where Queryable.Where |
En el siguiente ejemplo se usa la cláusula where
para filtrar de una matriz aquellas cadenas que tienen una longitud específica.
string[] words = ["the", "quick", "brown", "fox", "jumps"];
IEnumerable<string> query = from word in words
where word.Length == 3
select word;
foreach (string str in query)
{
Console.WriteLine(str);
}
/* This code produces the following output:
the
fox
*/
La consulta equivalente mediante la sintaxis del método se muestra en el código siguiente:
string[] words = ["the", "quick", "brown", "fox", "jumps"];
IEnumerable<string> query =
words.Where(word => word.Length == 3);
foreach (string str in query)
{
Console.WriteLine(str);
}
/* This code produces the following output:
the
fox
*/