C# C#  ·  25 вопросов  ·  ~70 мин  ·  ⏱ Таймер 10:00  ·  Сложный  · 

LINQ к объектам

Проверяет LINQ к объектам через фильтрацию, проекцию, группировку, соединение и отложенное выполнение. Особое внимание уделено повторному перечислению, изменению источника и тому, когда удобная цепочка незаметно выполняет работу несколько раз.

Отвечено: 0 из 25
⏱ --:--
0%
💡 Инструкция: Выберите один ответ из пяти. На 25 вопросов отведено 70 минут. В заданиях с кодом учитывайте указанную конструкцию и не додумывайте отсутствующие условия. После завершения откроются общий результат, тематические шкалы и разбор каждого ответа.
Вопрос 1 из 25
Какие значения останутся после фильтрации чётных чисел и умножения их на два?
C#
var result = new[] { 1, 2, 3, 4 }
    .Where(x => x % 2 == 0)
    .Select(x => x * 2);
Console.WriteLine(string.Join(',', result));
Вопрос 2 из 25
Что возвращает Select в этой цепочке?
C#
IEnumerable<string> names = customers.Select(c => c.Name);
Вопрос 3 из 25
Как выбрать номера исходных позиций элементов, равных "x"?
Вопрос 4 из 25
Изменит ли цепочка исходный список?
C#
var source = new List<int> { 1, 2, 3 };
var query = source.Where(x => x > 1).Select(x => x * 10);
Вопрос 5 из 25
Почему Where(x => Expensive(x)).Select(...) иногда стоит ставить после дешёвого фильтра?
Вопрос 6 из 25
Сколько групп получится?
C#
var groups = new[] { 1, 2, 3, 4, 5 }.GroupBy(x => x % 2);
Console.WriteLine(groups.Count());
Вопрос 7 из 25
Что содержит g.Key?
Вопрос 8 из 25
Как получить по одному объекту с Category и Count?
C#
var summary = orders
    .GroupBy(o => o.Category)
    .Select(g => new { Category = g.Key, Count = g.Count() });
Вопрос 9 из 25
Как сгруппировать email без учёта регистра?
Вопрос 10 из 25
Почему GroupBy может быть тяжёлым для большого потока?
C#
var grouped = hugeSequence.GroupBy(x => x.CustomerId);
// Первая выдача групп требует построить таблицу группировки.
Вопрос 11 из 25
Какие строки будут в результате?
C#
var left = new[] { (Id: 1, Name: "A"), (Id: 2, Name: "B") };
var right = new[] { (Id: 1, Code: "X"), (Id: 2, Code: "Y") };
var q = left.Join(right, l => l.Id, r => r.Id, (l, r) => $"{l.Name}:{r.Code}");
Вопрос 12 из 25
Что вернёт обычный Join для левого элемента без совпадения?
Вопрос 13 из 25
Как соединить по двум полям?
C#
var q = left.Join(right,
    l => new { l.Region, l.Number },
    r => new { r.Region, r.Number },
    (l, r) => (l, r));
Вопрос 14 из 25
Когда GroupJoin предпочтительнее Join?
Вопрос 15 из 25
Почему repeated FirstOrDefault внутри Select может быть хуже Join/Lookup?
C#
var q = customers.Select(c => new
{
    Customer = c,
    Order = orders.FirstOrDefault(o => o.CustomerId == c.Id)
});
Вопрос 16 из 25
Сколько элементов увидит отложенный запрос после добавления 4 в исходный список?
C#
var list = new List<int> { 1, 2, 3 };
var q = list.Where(x => x > 1);
list.Add(4);
Console.WriteLine(q.Count());
Вопрос 17 из 25
Как получить снимок результата до изменения источника?
Вопрос 18 из 25
Почему два foreach по запросу могут дважды вызвать дорогой селектор?
C#
var q = files.Select(ReadAndParse);
foreach (var x in q) Use(x);
foreach (var x in q) Audit(x);
Вопрос 19 из 25
Какой оператор здесь запускает перечисление?
C#
var items = source
    .Where(IsValid)
    .Select(Convert)
    .ToList();
Вопрос 20 из 25
Чем опасно повторное перечисление потока, читающего файл?
Вопрос 21 из 25
Какой assert лучше для точной последовательности?
C#
var actual = input.Where(x => x % 2 == 0).ToArray();
Assert.Equal(new[] { 2, 4 }, actual);
Вопрос 22 из 25
Как проверить, что источник перечисляется только один раз?
Вопрос 23 из 25
Почему тест OrderBy должен включать равные ключи?
C#
var actual = people.OrderBy(p => p.Age).ThenBy(p => p.Name).ToArray();
// В данных есть несколько людей одного возраста.
Вопрос 24 из 25
Что полезно измерить в длинной LINQ-цепочке?
Вопрос 25 из 25
Почему селектор с записью в базу — плохая идея?
C#
var q = orders.Select(o =>
{
    repository.Save(o); // скрытый побочный эффект при перечислении
    return o.Id;
});

Ответьте на все 25 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу