Что такое LINQ в C#

LINQ (Language Integrated Query) — это технология в C#, позволяющая работать с коллекциями данных, используя удобный и декларативный синтаксис, похожий на SQL. Она упрощает работу с различными источниками данных, такими как массивы, списки, XML-документы, базы данных и даже веб-сервисы.

Основные возможности LINQ

  • Унифицированный синтаксис для работы с разными источниками данных.
  • Поддержка отложенного выполнения запросов.
  • Возможность комбинирования и трансформации данных.
  • Интуитивно понятное представление запросов.

Основные операторы LINQ

Операторы LINQ разделяются на несколько категорий:

1. Фильтрация

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

var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);

2. Проекция (Select)

Позволяет преобразовывать элементы коллекции.

var words = new List<string> { "apple", "banana", "cherry" };
var lengths = words.Select(w => w.Length);

3. Сортировка

Позволяет упорядочивать элементы.

var sortedNumbers = numbers.OrderBy(n => n);

4. Группировка

Группирует элементы по определённому критерию.

var grouped = words.GroupBy(w => w.Length);

5. Агрегатные функции

Выполняют вычисления над элементами коллекции.

var sum = numbers.Sum();
var count = numbers.Count();

LINQ to Objects, LINQ to SQL и другие разновидности

LINQ работает с различными источниками данных:

  • LINQ to Objects – применяется к коллекциям в памяти (List<T>, Array).
  • LINQ to SQL (Entity Framework) – используется для работы с базами данных.
  • LINQ to XML – облегчает работу с XML-документами.
  • LINQ to JSON – позволяет обрабатывать JSON-данные.

Пример работы с LINQ to SQL

using (var context = new MyDbContext())
{
    var users = context.Users.Where(u => u.Age > 18).ToList();
}

Запрос не выполнится сразу, а будет преобразован в SQL и выполнен только при вызове ToList().

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