Поделиться через


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

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

Это важно

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

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

Схема, показывающая операцию фильтрации LINQ

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

Имя метода Описание Синтаксис выражения запроса 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
*/

См. также