Операции квантификатора в LINQ (C#)

Квантификаторы возвращают значение Boolean, которое указывает, удовлетворяют ли условию некоторые или все элементы в последовательности.

Внимание

В этих примерах используется System.Collections.Generic.IEnumerable<T> источник данных. Источники данных, основанные на System.Linq.IQueryProvider использовании System.Linq.IQueryable<T> источников данных и деревьев выражений. Деревья выражений имеют ограничения на допустимый синтаксис C#. Кроме того, каждый IQueryProvider источник данных, например EF Core , может наложить больше ограничений. Ознакомьтесь с документацией по источнику данных.

На приведенном ниже рисунке показаны два различных квантификатора, примененные к двум разным исходным последовательностям. Первая операция спрашивает, является ли любой из элементов символом A. Вторая операция спрашивает, являются ли все элементы символом A. Оба метода возвращаются true в этом примере.

Операции, использующие квантификаторы LINQ

Имя метода Description Синтаксис выражения запроса C# Дополнительные сведения
Все Определяет, все ли элементы последовательности удовлетворяют условию. Неприменимо. Enumerable.All
Queryable.All
Любое Определяет, удовлетворяют ли условию какие-либо элементы последовательности. Неприменимо. Enumerable.Any
Queryable.Any
Содержит Определяет, содержит ли последовательность указанный элемент. Неприменимо. Enumerable.Contains
Queryable.Contains

Все

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

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 поиск студентов, которые набрали больше 95 на любом экзамене.

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

Содержит

В следующем примере используется Contains поиск студентов, которые набрали ровно 95 на экзамене.

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

См. также