Operaciones cuantificadoras en LINQ (C#)
Las operaciones cuantificadoras devuelven un valor Boolean que indica si algunos o todos los elementos de una secuencia cumplen una condición.
Importante
En estos ejemplos se usa un origen de datos System.Collections.Generic.IEnumerable<T>. Los orígenes de datos basados en System.Linq.IQueryProvider usan orígenes de datos System.Linq.IQueryable<T> y árboles de expresión. Los árboles de expresión tienen limitaciones en la sintaxis de C# permitida. 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 siguiente ilustración se muestran dos operaciones cuantificadoras diferentes en dos secuencias de origen distintas. La primera operación pregunta si alguno de los elementos es el carácter "A". La segunda operación pregunta si todos los elementos son el carácter "A". Ambos métodos devuelven true
en este ejemplo.
Nombre del método | Descripción | Sintaxis de la expresión de consulta de C# | Más información |
---|---|---|---|
Todas | Determina si todos los elementos de una secuencia cumplen una condición. | No es aplicable. | Enumerable.All Queryable.All |
Cualquiera | Determina si algunos de los elementos de una secuencia cumplen una condición. | No es aplicable. | Enumerable.Any Queryable.Any |
Contiene | Determina si una secuencia contiene un elemento especificado. | No aplicable. | Enumerable.Contains Queryable.Contains |
All
En el siguiente ejemplo se usa el All
para encontrar a los estudiantes que han obtenido una puntuación por encima de 70 en todos los exámenes.
IEnumerable<string> names = from student in students
where student.Scores.All(score => score > 70)
select $"{student.FirstName} {student.LastName}: {string.Join(", ", student.Scores.Select(s => s.ToString()))}";
foreach (string name in names)
{
Console.WriteLine($"{name}");
}
// This code produces the following output:
//
// Cesar Garcia: 71, 86, 77, 97
// Nancy Engström: 75, 73, 78, 83
// Ifunanya Ugomma: 84, 82, 96, 80
Any
En el siguiente ejemplo se usa el Any
para encontrar a los estudiantes que han obtenido una puntuación por encima de 95 en cualquier examen.
IEnumerable<string> names = from student in students
where student.Scores.Any(score => score > 95)
select $"{student.FirstName} {student.LastName}: {student.Scores.Max()}";
foreach (string name in names)
{
Console.WriteLine($"{name}");
}
// This code produces the following output:
//
// Svetlana Omelchenko: 97
// Cesar Garcia: 97
// Debra Garcia: 96
// Ifeanacho Jamuike: 98
// Ifunanya Ugomma: 96
// Michelle Caruana: 97
// Nwanneka Ifeoma: 98
// Martina Mattsson: 96
// Anastasiya Sazonova: 96
// Jesper Jakobsson: 98
// Max Lindgren: 96
Contiene
En el siguiente ejemplo se usa el Contains
para encontrar a los estudiantes que han obtenido una puntuación de exactamente 95 en un examen.
IEnumerable<string> names = from student in students
where student.Scores.Contains(95)
select $"{student.FirstName} {student.LastName}: {string.Join(", ", student.Scores.Select(s => s.ToString()))}";
foreach (string name in names)
{
Console.WriteLine($"{name}");
}
// This code produces the following output:
//
// Claire O'Donnell: 56, 78, 95, 95
// Donald Urquhart: 92, 90, 95, 57