Фильтрация данных в C# с помощью LINQ

Фильтрация — это операция по ограничению значений в результирующем наборе только элементами, соответствующими указанному условию. Он также называется выбором элементов, которые соответствуют указанному условию.

Внимание

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

На следующем рисунке показаны результаты операции фильтрации последовательности символов. Предикат для операции фильтрации указывает, что символ должен быть "A".

Схема, иллюстрирующая операцию фильтрации LINQ

Стандартные методы оператора запроса, выполняющие выбор, перечислены в следующей таблице:

Имя метода Description Синтаксис выражения запроса C# Дополнительные сведения
OfType Выбирает значения в зависимости от возможности приведения их к указанному типу. Неприменимо. Enumerable.OfType

Queryable.OfType
Где Выбирает значения, основанные на функции предиката. where Enumerable.Where

Queryable.Where

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

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
*/

Эквивалентный запрос с использованием синтаксиса метода показан в следующем коде:

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
*/

См. также