В других языках программирования я видел Map и Reduce, и это краеугольные камни функционального программирования. Я не мог найти никаких рассуждений или истории, почему LINQ имеет Aggregate
(так же, как Reduce
) и Select
(так же, как Map
)?
Почему я спрашиваю, это то, что мне потребовалось некоторое время, чтобы понять, что это одно и то же, и мне любопытно, какова причина этого.
Ответы:
Это в основном сводится к истории LINQ.
Изначально LINQ задумывался как SQL-интерфейс и использовался (в основном, но не исключительно) для подключения к базам данных SQL. Это приводит к тому, что большая часть его терминологии основана на SQL.
Таким образом, «выберите» пришел из SQL
select
заявления, а «агрегат» пришел из агрегатных функций SQL (например,count
,sum
,avg
,min
,max
).Для тех, кто ставит под сомнение степень, в которой LINQ изначально относился к SQL, я хотел бы сослаться (например) на статьи Microsoft о Cω, который был разработан Microsoft Research и, по-видимому, именно там работала большая часть основ LINQ. до того, как они были добавлены в C # и .NET.
Например, рассмотрим статью MSDN о Cω , в которой говорится:
По крайней мере, насколько мне известно, операторы на основе XPath никогда не добавлялись в C #, оставляя только те операторы, которые были задокументированы (до того, как существовал LINQ), как основанные непосредственно на SQL.
Теперь, безусловно, верно, что LINQ не идентичен операторам запросов на основе SQL в Cω. В частности, LINQ следует синтаксису базовых объектов и вызовов функций в C # гораздо ближе, чем Cω. Запросы Cω следовали синтаксису SQL еще более тесно, поэтому вы можете написать что-то вроде этого (опять же, прямо из статьи, приведенной выше):
И да, в той же статье говорится конкретно об использовании запросов на основе SQL для запроса данных, поступающих из реальных баз данных SQL:
Итак, да, с самого начала (или даже до начала, в зависимости от вашей точки зрения) LINQ явно основывался на SQL и предназначался специально для предоставления доступа к данным в базах данных SQL.
источник
for
циклы, а Haskell - как императивные блоки кода в стиле C, и поэтому Scala вызывает свою монадическую операциюflatMap
, а Haskell вызывает ееreturn
по той же причине: чтобы соответствовать «иллюзии», предотвращенной (бывшие) императивные программисты.Методы LINQ в .Net
были названы так, чтобы соответствовать синтаксису запросов LINQ в C # (и VB.NET)
который был разработан, чтобы быть знакомым людям, которые знают SQL
источник
Для меня выбор и агрегирование имеют больше смысла. Поскольку сущность становится доминирующим методом для запросов и манипулирования данными в .Net, Linq все больше и больше используется разработчиками, которые, вероятно, привыкли работать с данными через SQL. Таким образом, использование таких слов, как «Выбрать», имеет больше смысла для этих разработчиков, потому что это ключевые слова, к которым они привыкли.
источник
INNER JOIN
хотя бы один день, когда Entity Framework не был вариантом. Наверное, совсем наоборот. Все больше людей используют LINQ каждый день, кто активно избегает написания SQL. Люди, которые знакомы с SQL, вероятно, просто делают больше в SQL.