Содержание курса
LINQ как модель работы с данными
9 уроков
1.
LINQ для тех, кто пришёл из другого языка
↗
2.
Проект Tally — сверка платежей как задача для LINQ
↗
3.
Окружение — .NET 11, C# 15 и структура решения
↗
4.
IEnumerable и IEnumerator — контракт, на котором стоит LINQ
↗
5.
Делегаты и лямбды — как LINQ принимает поведение
↗
6.
Extension-методы и устройство класса Enumerable
↗
7.
Синтаксис запросов и синтаксис методов
↗
8.
Первый конвейер сверки — Where, Select, OrderBy над выпиской
↗
9.
Практика — читаем и фильтруем settlement-файл
↗
Отложенное выполнение и жизненный цикл запроса
9 уроков
1.
Deferred execution — запрос как описание, а не результат
↗
2.
Streaming и buffering операторы
↗
3.
Материализация — ToList, ToArray, ToDictionary, ToLookup
↗
4.
Повторное перечисление и его цена
↗
5.
yield return — свои ленивые источники и операторы
↗
6.
Захват переменных и изменяемое состояние в конвейере
↗
7.
Исключения и ресурсы в ленивых конвейерах
↗
8.
Немедленные операторы — Count, Any, First, Single, Sum
↗
9.
Практика — потоковая обработка большого файла выписки
↗
Фильтрация, проекция и упорядочивание
8 уроков
1.
Where — предикаты, индекс, композиция условий
↗
2.
Select — проекция в записи, кортежи и анонимные типы
↗
3.
SelectMany — разворачивание вложенных коллекций
↗
4.
Сортировка — OrderBy, ThenBy, Order, стабильность и comparers
↗
5.
Take, Skip и окна — пагинация и срезы
↗
6.
Уникальность и объединение — Distinct, Index, Zip, Concat
↗
7.
Cast, OfType, AsEnumerable — статический тип последовательности
↗
8.
Практика — нормализация строк выписки в доменные записи
↗
Группировка, агрегация и ключи
9 уроков
1.
GroupBy — IGrouping, селекторы ключа, элемента и результата
↗
2.
Ключи группировки — анонимные типы, кортежи, records
↗
3.
Агрегаты — Sum, Min, Max, Average, Count, LongCount
↗
4.
MinBy, MaxBy, CountBy, AggregateBy — операторы вместо GroupBy
↗
5.
Aggregate — свёртка с seed и селектором результата
↗
6.
ToLookup против GroupBy против ToDictionary
↗
7.
Многоуровневая группировка и иерархические отчёты
↗
8.
IEqualityComparer и IComparer для LINQ
↗
9.
Практика — отчёт по комиссиям в Tally
↗
Соединения и операции над множествами
9 уроков
1.
Join — внутреннее соединение по ключу
↗
2.
GroupJoin — соединение с группировкой
↗
3.
LeftJoin, RightJoin и FullJoin — внешние соединения
↗
4.
DefaultIfEmpty и старые паттерны outer join
↗
5.
Except, Intersect, Union и их By-версии
↗
6.
Contains, Any в Where и производительность поиска
↗
7.
SequenceEqual и Zip — сравнение последовательностей
↗
8.
Алгоритм многоэтапной сверки
↗
9.
Практика — движок сверки Tally
↗
Собственные операторы и расширение LINQ
9 уроков
1.
Анатомия оператора LINQ
↗
2.
Операторы на yield — Windowed, Pairwise, RunningTotal
↗
3.
Extension-блоки C# 14 для доменных операторов
↗
4.
Операторы с состоянием — DistinctUntilChanged, TakeUntil
↗
5.
Обобщённые агрегаты и INumber
↗
6.
Операторы над IQueryable — почему yield не работает
↗
7.
Тестирование операторов на xunit v3
↗
8.
Оформление операторов как библиотеки
↗
9.
Практика — библиотека операторов Tally
↗
Коллекции, типы и память в конвейерах
9 уроков
1.
Что стоит за IEnumerable — списки, массивы и fast-path в LINQ
↗
2.
Records, структуры и value-типы в конвейере
↗
3.
Анонимные типы против records и кортежей
↗
4.
Неизменяемые и frozen-коллекции
↗
5.
Аллокации — делегаты, замыкания, итераторы, boxing
↗
6.
BenchmarkDotNet для LINQ
↗
7.
Когда LINQ проигрывает циклу
↗
8.
Строки и LINQ
↗
9.
Практика — профилируем конвейер сверки
↗
Expression trees и IQueryable
10 уроков
1.
Func и Expression — две формы одной лямбды
↗
2.
Строение дерева выражений
↗
3.
IQueryable и IQueryProvider
↗
4.
Композиция предикатов — And, Or, Not
↗
5.
Динамическая фильтрация по HTTP-параметрам
↗
6.
Динамическая сортировка и пагинация
↗
7.
Спецификации
↗
8.
ExpressionVisitor и переписывание деревьев
↗
9.
Границы Expression — что нельзя выразить
↗
10.
Практика — фильтры и спецификации для API Tally
↗
LINQ и EF Core — перевод запросов в SQL
10 уроков
1.
Tally.Data — EF Core 11 и SQLite
↗
2.
Как IQueryable превращается в SQL
↗
3.
Проекции в SQL
↗
4.
Client evaluation и server evaluation
↗
5.
Join, GroupBy и агрегаты на сервере
↗
6.
Include, проекция и split queries
↗
7.
Tracking и identity resolution
↗
8.
ExecuteUpdate и ExecuteDelete
↗
9.
Compiled queries, FromSql и композиция
↗
10.
Практика — репозиторий сверки на EF Core
↗
Асинхронные потоки и параллельный LINQ
9 уроков
1.
IAsyncEnumerable и await foreach
↗
2.
System.Linq.AsyncEnumerable в BCL
↗
3.
Асинхронные источники — постраничный API провайдера
↗
4.
CancellationToken в асинхронных конвейерах
↗
5.
EF Core и асинхронность
↗
6.
PLINQ — AsParallel и степень параллелизма
↗
7.
PLINQ — ловушки
↗
8.
Channels и LINQ — producer и consumer
↗
9.
Практика — асинхронный ingestion выписок
↗
LINQ в архитектуре сервиса
9 уроков
1.
Граница IQueryable
↗
2.
Read-модели и проекции
↗
3.
Пагинация — offset и keyset
↗
4.
Minimal API с фильтрами и сортировкой
↗
5.
Тестирование запросов
↗
6.
Экспорт — потоковые CSV и JSON
↗
7.
Правила сверки как данные
↗
8.
Наблюдаемость запросов
↗
9.
Практика — сборка Tally.Api end-to-end
↗
Производительность, антипаттерны и код-ревью LINQ
9 уроков
1.
Каталог антипаттернов
↗
2.
Анализаторы для LINQ
↗
3.
Читаемость конвейеров
↗
4.
Null-безопасность в LINQ
↗
5.
LINQ в горячих путях
↗
6.
LINQ над деревьями — System.Xml.Linq и JsonNode
↗
7.
Шпаргалка миграции на LINQ
↗
8.
Код-ревью LINQ
↗
9.
Практика — финальная сборка и ревью Tally
↗