Комментарии (2)
🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Основные методы LINQ в C#
LINQ (Language Integrated Query) предоставляет богатый набор методов для работы с коллекциями и данными. Методы можно разделить на несколько категорий.
1. Методы фильтрации и выборки
Эти методы позволяют фильтровать последовательности данных.
// Where - фильтрация по условию
var numbers = new List<int> { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0); // 2, 4
// Take - взять первые N элементов
var firstThree = numbers.Take(3); // 1, 2, 3
// Skip - пропустить первые N элементов
var skipTwo = numbers.Skip(2); // 3, 4, 5
// TakeWhile / SkipWhile - с условием
var takeWhileLessThanFour = numbers.TakeWhile(n => n < 4); // 1, 2, 3
2. Методы проекции и трансформации
Преобразуют элементы последовательности.
// Select - преобразование каждого элемента
var squared = numbers.Select(n => n * n); // 1, 4, 9, 16,活 25
// SelectMany - "разворачивает" коллекции
var nestedLists = new List<List<int>> { new List<int> {1, 2}, new List<int> {3} };
var flattened = nestedLists.SelectMany(list => list); // 1, 2, 3
3. Методы агрегации и вычисления
Выполняют вычисления над всей последовательностью.
// Sum, Average, Min, Max, Count
var sum = numbers.Sum(); // 15
var average = numbers.Average(); // 3
var count = numbers.Count(); // 5
// Aggregate - пользовательская агрегация
var product = numbers.Aggregate(1, (acc, n) => acc * n); // 120 (1*2*3*4*5)
4. Методы группировки и сортировки
Организуют данные в группы или упорядочивают их.
// GroupBy - группировка по ключу
var people = new List<Person> { /* данные */ };
var groupedByAge = people.GroupBy(p => p.Age);
// OrderBy / OrderByDescending - сортировка
var sortedNumbers = numbers.OrderBy(n => n); // 1, 2, 3, 4, 5
var descending = numbers.OrderByDescending(n => n); // 5, 4, 3, 2, 1
5. Методы соединения и сравнения
Работают с несколькими последовательности.
// Join - аналогично JOIN в SQL
var customers = new List<Customer>();
var orders = new List<Order>();
var joined = customers.Join(orders,
c => c.Id,
o => o.CustomerId,
(c, o) => new { CustomerName = c.Name, OrderId = o.Id });
// Union, Intersect, Except - операции с множествами
var set1 = new List<int> { 1, 2, 3 };
var set2 = new List<int> { 3, 4, 5 };
var union = set1.Union(set2); // 1, 2, 3, 4, 5
6. Методы проверки существования и получения элементов
Проверяют условия и получают конкретные элементы.
// Any, All, Contains - проверка условий
var hasEven = numbers.Any(n => n % 2 == 0); // true
var allPositive = numbers.All(n => n > 0); // true
var containsThree = numbers.Contains(3); // true
// First, FirstOrDefault, Single, SingleOrDefault - получение элементов
var firstEven = numbers.First(n => n % 2 == 0); // 2
var firstOrDefault = numbers.FirstOrDefault(n => n > 10); // 0 (default)
7. Методы преобразования типов
Изменяют тип коллекции.
// ToArray, ToList - преобразование в массивы и списки
var array = numbers.ToArray();
var list = numbers.ToList();
// ToDictionary, ToLookup - создание словарей и Lookup
var dict = people.ToDictionary(p => p.Id);
var lookup = people.ToLookup(p => p.Department);
8. Дополнительные полезные методы
// Distinct - удаление дубликатов
var distinct = new List<int> { 1, 2, 2, 3 }.Distinct(); // 1, 2, 3
// Zip - объединение двух последовательностей
var letters = new List<char> { 'A', 'B', 'C' };
var zipped = numbers.Zip(letters, (n, l) => $"{n}{l}"); // "1A", "2B", "3C"
Ключевые особенности
- Отложенное выполнение (Deferred Execution) - многие методы (Where, Select) не выполняются сразу, а только при итерации или вызове методов типа ToList()
- Немедленное выполнение (Immediate Execution) - методы агрегации (Sum, Count) и преобразования (ToList, ToArray) выполняются сразу
- Композиция методов - методы LINQ можно легко комбинировать, создавая сложные запросы
- Два стиля использования - синтаксис методов (Method Syntax) и синтаксис запросов (Query Syntax)
LINQ значительно упрощает обработку данных в C#, делает код более читаемым и выразительным, а также позволяет эффективно работать с различными источниками данных (коллекции, XML, базы данных через Entity Framework).