Dans d'autres langages de programmation, j'ai vu Map and Reduce, et ce sont les pierres angulaires de la programmation fonctionnelle. Je n'ai trouvé aucun raisonnement ou historique pour lesquels LINQ a Aggregate
(identique à Reduce
) et Select
(identique à Map
)?
Pourquoi je demande, c'est qu'il m'a fallu un certain temps pour comprendre que c'est la même chose et je suis curieux de savoir pourquoi.
Réponses:
Cela se résume principalement à l'histoire de LINQ.
LINQ était à l' origine destiné à être de type SQL et utilisé (en grande partie, mais pas exclusivement) pour se connecter à des bases de données SQL. Cela conduit à une grande partie de sa terminologie basée sur SQL.
Alors, « sélectionner » est venu de la SQL
select
déclaration, et « agrégat » provenaient de fonctions SQL globales (par exemplecount
,sum
,avg
,min
,max
).Pour ceux qui se demandent dans quelle mesure LINQ était à l'origine lié à SQL, je ferais référence (par exemple) aux articles de Microsoft sur Cω, qui a été un langage conçu par Microsoft Research, et semble être l'endroit où la plupart des bases de LINQ ont été travaillées avant d'être ajoutés à C # et .NET.
Par exemple, considérez un article MSDN sur Cω , qui dit:
Pour autant que je sache, les opérateurs basés sur XPath n'ont jamais été ajoutés à C #, ne laissant que les opérateurs qui ont été documentés (avant que LINQ existe) comme étant basés directement sur SQL.
Maintenant, il est certainement vrai que LINQ n'est pas identique aux opérateurs de requête basés sur SQL en Cω. En particulier, LINQ suit les objets de base de C # et la syntaxe des appels de fonction beaucoup plus étroitement que Cω. Les requêtes Cω suivaient la syntaxe SQL de plus près, vous pouvez donc écrire quelque chose comme ça (encore une fois, tiré directement de l'article lié ci-dessus):
Et oui, le même article parle spécifiquement de l'utilisation des requêtes basées sur SQL pour interroger des données provenant de bases de données SQL réelles:
Donc, oui, dès le début (ou même avant le début, selon votre point de vue) LINQ était explicitement basé sur SQL et destiné spécifiquement à permettre l'accès aux données dans les bases de données SQL.
la source
for
boucles, et à Haskell ressemblent à des blocs de code impératifs de style C, et donc Scala appelle son fonctionnement monadiqueflatMap
, et Haskell l'appellereturn
pour la même raison: pour s'adapter à l '«illusion» empêchée de (anciens) programmeurs impératifs.Méthodes LINQ dans .Net
ont été nommés pour être cohérents avec la syntaxe de requête LINQ en C # (et VB.NET)
qui a été conçu pour être familier aux personnes qui connaissent SQL
la source
Pour moi, Select et Aggregate ont plus de sens. Alors que l'entité devient la méthode dominante pour interroger et manipuler des données dans .Net, Linq est de plus en plus utilisé par les développeurs qui sont probablement habitués à travailler avec des données via SQL. Donc, utiliser des mots comme "Select" a plus de sens pour ces développeurs, car ce sont les mots-clés auxquels ils sont habitués.
la source
INNER JOIN
jour où Entity Framework n'était pas une option. Probablement tout le contraire. De plus en plus de personnes utilisent LINQ tous les jours et évitent activement d' écrire SQL. Les gens qui sont à l'aise avec SQL font probablement plus en SQL.