В чем разница между Select и SelectMany в linq

Приветствую всех! Кода вы начинаете разбираться в LINQ часто задаетесь вопросами в чем разница между Select и SelectMany. Эти вопросы возникают не только у одного из вас, а у многих. Поэтому я их хочу помочь вам разобраться в этом вопросе.

Select — Создает проекцию части последовательности.
SelectMany — Создает проекцию части последовательности по принципу «один ко многим».

Операция SelectMany объединяет подпоследовательности в единую выходную последовательность. Вспомните, что для каждого входного элемента операция Select выдает в точ­ности один выходной элемент, вошел один и вышел один. В противоположность этому SelectMany который выдает один элемент ко многим, то есть вошел один элемент вышло много либо ноль. В  SelectMany элементы берутся из подпоследовательности или дочерней последовательности, которую должно выдавать лямбда-выражение.

Посмотрим что находиться внутри SelectMany:

Получаем входную последовательность элементов типа T и делегат метода-селектора, а возвращает объект, который при перечислении проходит по входной последовательности, получая каждый элемент индивидуально из входной последовательности и передавая его в метод-селектор. Последний затем возвращает объект, который во время перечисления выдает ноль или более элементов типа S в промежуточную выходную последовательность. Операция SelectMany вернет конкатенированную выходную последовательность при каждом вызове метода-селектора.

Таким образом мы получаем из string [] массива строк char [] массив символов.

 

Обновлено: 19.01.2018 — 10:37

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.