Чему вы научитесь
- Читать конвейер 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-кода по чек-листу и находить антипаттерны, которые не ловят анализаторы
О курсе
LINQ для разработчиков уровня middle, которые пришли в C# из других языков: как устроены операторы, что происходит при перечислении, как запрос превращается в SQL и где LINQ стоит дорого. Двенадцать глав на C# 15 и .NET 11 вокруг одного рабочего проекта — сервиса сверки платежей.
Для кого этот курс
Backend- и системные разработчики уровня middle, которые перешли в C# из Python, Java, Kotlin, JavaScript, Go или Rust и уже пишут на нём, но LINQ используют по аналогии с привычными map/filter. C#-разработчики, которым нужно понять, почему запросы медленные, почему EF Core не переводит выражение или почему результат отличается от ожидаемого. Курс не подойдёт тем, кто только начинает программировать или ещё не знаком с C#.
Начальные требования
- Уверенное программирование на любом backend-языке: коллекции, функции высшего порядка, интерфейсы, базовый SQL
- Базовый синтаксис C#: классы, методы, лямбды, generics — глубокого знания не требуется
- Установленный .NET 11 SDK и редактор (VS Code с C# Dev Kit, Rider или Visual Studio)
- Умение работать с командной строкой и
dotnetCLI
Преподаватели курса
Формат курса
Текстовые уроки с большим объёмом кода из сквозного проекта. После каждого урока — практическое задание в проекте Tally и вопросы для самопроверки; в конце глав с третьей по десятую — тестовые задачи с одним верным ответом и объяснением. Дедлайнов нет, порядок прохождения — последовательный.
Что вы получите
- Проект 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
Нагрузка
4–6 часов в неделю