Чему вы научитесь
- Читать конвейер LINQ как описание преобразования и предсказывать, когда и сколько раз выполнится каждый оператор
- Выбирать оператор под задачу: GroupBy против ToLookup, Join против HashSet, MaxBy против сортировки, CountBy и AggregateBy вместо группировки
- Писать соединения и операции над множествами с правильными comparer, включая LeftJoin и FullJoin
- Создавать собственные операторы на yield и extension-блоках с проверкой ленивости в тестах
- Измерять стоимость конвейера BenchmarkDotNet и решать, где LINQ заменить циклом или Span
- Строить деревья выражений для динамических фильтров и сортировок и понимать границы их трансляции
- Писать запросы EF Core, которые переводятся в один SQL, и проверять это через ToQueryString
- Работать с асинхронными потоками, отменой, PLINQ и каналами в конвейерах загрузки данных
- Проектировать слой данных сервиса без утечки IQueryable наружу, с read-моделями и keyset-пагинацией
- Проводить ревью LINQ-кода по чек-листу и находить антипаттерны, которые не ловят анализаторы
О курсе
payments.Where(p => lines.Any(l => l.Ref == p.Ref)) работает мгновенно на тестовых данных и минуты — на ста тысячах платежей. db.Orders.AsEnumerable().Where(...) читает всю таблицу в память, и никто этого не замечает, пока таблица маленькая. Тот же IEnumerable перечисляется дважды, и файл выписки читается дважды. LINQ прост в первый день и полон таких ловушек в первый год; курс — о механизмах, которые за ними стоят.
Что внутри
Двенадцать глав, 109 уроков. Первые две — модель: IEnumerable, делегаты, отложенное выполнение, yield, повторное перечисление. Главы с третьей по пятую — операторы: фильтрация и проекция, группировка и агрегаты, соединения (включая LeftJoin и FullJoin из .NET 10–11) и операции над множествами. Шестая — собственные операторы и extension-блоки C# 14. Седьмая — коллекции, аллокации и BenchmarkDotNet. Восьмая — expression trees, IQueryable и динамические фильтры. Девятая — EF Core 11: перевод в SQL, проекции, трекинг, ExecuteUpdate, compiled queries. Десятая — IAsyncEnumerable, PLINQ и Channels. Одиннадцатая — LINQ в архитектуре сервиса: граница IQueryable, read-модели, keyset-пагинация, Minimal API, потоковый экспорт, наблюдаемость. Двенадцатая — антипаттерны, анализаторы, null-безопасность, LINQ над XML и JSON, код-ревью.
Сквозной проект
Все главы строят один сервис — Tally, сверку реестра платежей с выписками платёжных провайдеров. Он читает CSV потоком, сопоставляет платежи со строками выписок многоэтапным алгоритмом на FullJoin, Join и ExceptBy, считает комиссии, хранит расхождения в SQLite через EF Core, отдаёт их через HTTP API с фильтрами и курсорной пагинацией и экспортирует потоком. Каждый урок ссылается на конкретные файлы проекта; проект собирается, покрыт тестами на xunit v3 и бенчмарками.
Метод
Основа урока — код с разбором механизма: что делает оператор, когда он выполняется, что аллоцирует, во что транслируется. Описательных абзацев минимум. Каждый урок заканчивается практическим заданием на проекте и вопросами для самопроверки; каждая глава — практикой, где написанное собирается в рабочий фрагмент Tally. Главы с третьей по десятую завершаются тестовыми задачами с объяснением после неверного ответа.
Чего в курсе нет
Введения в C# и .NET, объектно-ориентированного проектирования, устройства SQL и реляционных баз — предполагается, что это известно из предыдущего языка. Нет и обзора «всех способов писать запросы»: курс строго о LINQ, его операторах и механизмах, рекомендуемых актуальной документацией .NET.
Как проходит обучение
Текстовые уроки с кодом, задания выполняются локально в проекте Tally на .NET 11 SDK. Дедлайнов нет. Курс проходится последовательно: главы опираются друг на друга и на растущий проект.
Для кого этот курс
Начальные требования
- Уверенное программирование на любом backend-языке: коллекции, функции высшего порядка, интерфейсы, базовый SQL
- Базовый синтаксис C#: классы, методы, лямбды, generics — глубокого знания не требуется
- Установленный .NET 11 SDK и редактор (VS Code с C# Dev Kit, Rider или Visual Studio)
- Умение работать с командной строкой и
dotnetCLI
Наши преподаватели
Программа курса
Сертификат
Что вы получаете
- Проект Tally: сервис сверки платежей на .NET 11 с CLI, HTTP API, тестами и бенчмарками, который собирается и запускается на своих данных
- Библиотеку собственных операторов LINQ: Windowed, Pairwise, RunningTotal, DistinctUntilChanged, GroupAdjacent, TakeUntil
- Готовые компоненты для сервиса: динамические фильтры и сортировка на expression trees, спецификации, курсорная пагинация, потоковый экспорт
- Каталог антипаттернов LINQ с заменами и чек-лист код-ревью
- Настройку анализаторов .NET для LINQ в .editorconfig
- Шпаргалку соответствий операторов LINQ для Python, Java, Kotlin, JavaScript, Rust и Go