Я искал разницу между Select
и , SelectMany
но я не смог найти подходящий ответ. Мне нужно узнать разницу при использовании LINQ To SQL, но я нашел только стандартные примеры массивов.
Может кто-нибудь привести пример LINQ To SQL?
c#
linq-to-sql
linq
Тарик
источник
источник
Ответы:
SelectMany
уплощает запросы, которые возвращают списки списков. НапримерЖивая Демо на .NET Fiddle
источник
Выбрать много - это как операция перекрестного соединения в SQL, где он принимает перекрестный продукт.
Например, если у нас есть
Выберите многие могут быть использованы, чтобы получить следующий набор
Обратите внимание, что здесь мы берем все возможные комбинации, которые можно составить из элементов множества A и множества B.
Вот пример LINQ, который вы можете попробовать
смесь будет иметь следующие элементы в плоской структуре, такие как
источник
SelectMany
это . Скорее, это способ, которыйSelectMany
можно использовать, но на самом деле это не обычный способ его использования.Where
состояние после SelectMany...
источник
SelectMany()
позволяет свернуть многомерную последовательность таким образом, что в противном случае потребовалась бы секундаSelect()
или цикл.Более подробная информация в этом блоге .
источник
Есть несколько перегрузок на
SelectMany
. Один из них позволяет вам отслеживать любые отношения между родителями и потомками при обходе иерархии.Пример : предположим , что вы имеете следующую структуру:
League -> Teams -> Player
.Вы можете легко вернуть фиксированную коллекцию игроков. Однако вы можете потерять любую ссылку на команду, в которую входит игрок.
К счастью, для такой цели существует перегрузка:
Предыдущий пример взят из блога Дэна IK . Я настоятельно рекомендую вам взглянуть на это.
источник
Я понимаю,
SelectMany
что работать как ярлык соединения.Так что вы можете:
источник
.SelectMany(c => new {c.CompanyName, c.Orders.ShippedDate});
не будет работать. SelectMany довольно сглаживает список списков - и вы можете выбрать любой (но только по одному) из содержащихся списков для результата. Для сравнения: внутреннее соединение в Linq .Выбор - это простая проекция один-к-одному из исходного элемента в элемент результата. Select-Many используется, когда в выражении запроса есть несколько предложений from: каждый элемент в исходной последовательности используется для генерации новой последовательности.
источник
Некоторые SelectMany могут не понадобиться. Ниже 2 запроса дают одинаковый результат.
Для отношений 1-ко-многим,
источник
Не слишком технически - база данных со многими организациями, каждая из которых имеет много пользователей: -
оба возвращают один и тот же список ApplicationUser для выбранной организации.
Первый «проект» от организации до пользователей, второй напрямую запрашивает таблицу пользователей.
источник
Это более понятно, когда запрос возвращает строку (массив char):
Например, если список «Фрукты» содержит «яблоко»
«Выбрать» возвращает строку:
«SelectMany» выравнивает строку:
источник
Метод SelectMany () используется для выравнивания последовательности, в которой каждый из элементов последовательности является отдельным.
У меня
user
такой же класс, как этотглавный:
источник
Просто для альтернативного представления, которое может помочь некоторым функциональным программистам:
Select
являетсяmap
SelectMany
естьbind
(илиflatMap
для ваших людей Scala / Kotlin)источник
Рассмотрим этот пример:
Таким образом, как вы видите, повторяющиеся значения, такие как «I» или «like», были удалены из query2, потому что «SelectMany» выравнивает и проецирует через несколько последовательностей. Но query1 возвращает последовательность строковых массивов. и поскольку в query1 есть два разных массива (первый и второй элемент), ничего не будет удалено.
источник
Еще один пример того, как SelectMany + Select может использоваться для накопления данных объектов подмассива.
Предположим, у нас есть пользователи с их телефонами:
Теперь нам нужно выбрать базовые части всех телефонов всех пользователей:
источник
usersArray.SelectMany(ua => ua.Phones.Select(p => p.BasePart))
Вот пример кода с инициализированной небольшой коллекцией для тестирования:
источник
В
SelectMany
методе сбиваетIEnumerable<IEnumerable<T>>
вIEnumerable<T>
, как коммунизм, каждый элемент ведет себя таким же образом (тупой парень имеет то же права гениальные одного).источник
Это лучший способ понять, я думаю.
Пример таблицы умножения.
источник