In anderen Programmiersprachen habe ich Map und Reduce gesehen, und das sind die Eckpfeiler der funktionalen Programmierung. Ich konnte keine Begründung oder Vorgeschichte finden, warum LINQ Aggregate
(dasselbe wie Reduce
) und Select
(dasselbe wie Map
) hat.
Warum ich frage, ist, dass ich eine Weile gebraucht habe, um zu verstehen, dass es dasselbe ist, und ich bin gespannt, was der Grund dafür ist.
Antworten:
Dies hängt hauptsächlich mit der Geschichte von LINQ zusammen.
LINQ sollte ursprünglich SQL-ähnlich sein und (weitgehend, aber nicht ausschließlich) zum Herstellen einer Verbindung mit SQL-Datenbanken verwendet werden. Dies führt dazu, dass ein Großteil der Terminologie auf SQL basiert.
So " die Option" kam aus der SQL -
select
Anweisung und "Aggregat" kam von SQL - Aggregatfunktionen (zBcount
,sum
,avg
,min
,max
).Für diejenigen, die in Frage stellen, inwieweit sich LINQ ursprünglich auf SQL bezieht, würde ich (zum Beispiel) auf die Artikel von Microsoft zu Cω verweisen, einer Sprache, die von Microsoft Research entwickelt wurde und in der anscheinend die meisten Grundlagen von LINQ erarbeitet wurden aus, bevor sie zu C # und .NET hinzugefügt wurden.
Betrachten Sie zum Beispiel einen MSDN-Artikel zu Cω , in dem es heißt:
Zumindest soweit ich weiß, wurden die XPath-basierten Operatoren niemals zu C # hinzugefügt, sodass nur die Operatoren, die dokumentiert wurden (bevor LINQ existierte), direkt auf SQL basierten.
Nun ist es sicher richtig, dass LINQ nicht mit den SQL-basierten Abfrageoperatoren in Cω identisch ist. Insbesondere folgt LINQ den grundlegenden Objekten und Funktionsaufrufen von C # viel genauer als Cω. Cω-Abfragen folgten der SQL-Syntax noch genauer, sodass Sie so etwas schreiben können (wiederum direkt aus dem oben verlinkten Artikel):
Und ja, der gleiche Artikel befasst sich speziell mit der Verwendung von SQL-basierten Abfragen zum Abfragen von Daten, die aus tatsächlichen SQL-Datenbanken stammen:
Also, ja, von Anfang an (oder sogar vor Beginn, abhängig von Ihrer Sichtweise) basierte LINQ explizit auf SQL und sollte speziell den Zugriff auf Daten in SQL-Datenbanken ermöglichen.
quelle
for
Schleifen aus, und Haskells sehen aus wie imperative C-Codeblöcke, und so nennt Scala seine monadische OperationflatMap
und Haskell nennt siereturn
den gleichen Grund: sich der "Illusion" anzupassen, die verhindert wird (ehemalige) imperative Programmierer.LINQ-Methoden in .Net
wurden so benannt, dass sie mit der LINQ-Abfragesyntax in C # (und VB.NET) übereinstimmen
Das wurde entwickelt, um Menschen, die sich mit SQL auskennen, vertraut zu sein
quelle
Select and Aggregate macht für mich mehr Sinn. Da Entity die vorherrschende Methode zum Abfragen und Bearbeiten von Daten in .Net wird, wird Linq immer häufiger von Entwicklern verwendet, die es wahrscheinlich gewohnt sind, mit Daten über SQL zu arbeiten. Daher ist die Verwendung von Wörtern wie "Auswählen" für diese Entwickler sinnvoller, da dies die Schlüsselwörter sind, an die sie gewöhnt sind.
quelle
INNER JOIN
Tag machen musste, als Entity Framework keine Option war. Wahrscheinlich ganz im Gegenteil. Immer mehr Menschen verwenden LINQ täglich und vermeiden aktiv das Schreiben von SQL. Leute, die sich in SQL wohlfühlen, tun wahrscheinlich mehr in SQL.