Что такое LINQ и для чего он используется в C#
Что проверяют
Понимаете ли вы отложенное выполнение и разницу между LINQ to Objects и провайдерами вроде EF Core.
Как отвечать
LINQ это единый синтаксис запросов к данным: коллекциям в памяти, базе через EF Core, XML, любому источнику с провайдером.
var names = users.Where(u => u.Age >= 18).OrderBy(u => u.Name).Select(u => u.Name);Ключевая вещь это отложенное выполнение. Цепочка операторов не выполняется, пока результат не начали перебирать. Запуск происходит на ToList, ToArray, First, Count, foreach. Отсюда практические следствия: запрос можно собирать по частям, но и повторный перебор выполнит его заново.
Вторая ключевая вещь это разница между IEnumerable и IQueryable. Первый работает в памяти, лямбда компилируется в делегат. Второй строит дерево выражений, которое провайдер переводит в SQL. Отсюда классическая ошибка: вызов AsEnumerable или неподдерживаемого метода посреди цепочки заставляет вытащить всю таблицу в память и фильтровать уже там.
Полезно назвать группы операторов: фильтрация (Where), проекция (Select, SelectMany), сортировка, группировка (GroupBy), соединения (Join, GroupJoin), агрегаты (Sum, Count, Aggregate), множества (Distinct, Union), разбиение (Skip, Take).
Где спотыкаются
Не знают про отложенное выполнение и удивляются, что запрос выполнился дважды.
Смешивают IQueryable и IEnumerable, вытаскивая таблицу целиком.
Вызывают Count() там, где достаточно Any().
Не различают First и FirstOrDefault и получают исключение на пустой выборке.