En otros lenguajes de programación, he visto Map and Reduce, y esos son los pilares de la programación funcional. No pude encontrar ningún razonamiento o historial por qué LINQ tiene Aggregate
(igual que Reduce
) y Select
(igual que Map
).
Lo que pregunto es que me tomó un tiempo entender que es lo mismo y tengo curiosidad por saber cuál es el razonamiento.
Respuestas:
Esto se reduce principalmente a la historia de LINQ.
Originalmente, LINQ tenía la intención de ser similar a SQL, y se usó (en gran medida, aunque no exclusivamente) para conectarse a bases de datos SQL. Esto lleva a que gran parte de su terminología se base en SQL.
Por lo tanto, "seleccionar" vinieron del SQL
select
declaración, y "agregado" vinieron de las funciones agregadas de SQL (por ejemplo,count
,sum
,avg
,min
,max
).Para aquellos que cuestionan el grado en que LINQ se relacionó originalmente con SQL, me referiría (por ejemplo) a los artículos de Microsoft sobre Cω, que fue un lenguaje diseñado por Microsoft Research, y parece ser donde se trabajó la mayoría de los conceptos básicos de LINQ antes de agregarlos a C # y .NET.
Por ejemplo, considere un artículo de MSDN sobre Cω , que dice:
Al menos hasta donde sé, los operadores basados en XPath nunca se agregaron a C #, dejando solo los operadores que estaban documentados (antes de que existiera LINQ) como basados directamente en SQL.
Ahora, es cierto que LINQ no es idéntico a los operadores de consulta basados en SQL en Cω. En particular, LINQ sigue los objetos básicos de C # y la sintaxis de llamadas de función mucho más de cerca que Cω. Las consultas Cω siguieron la sintaxis SQL aún más de cerca, por lo que podría escribir algo como esto (nuevamente, extraído directamente del artículo vinculado anteriormente):
Y sí, el mismo artículo habla específicamente sobre el uso de consultas basadas en SQL para consultar datos provenientes de bases de datos SQL reales:
Entonces, sí, desde el principio (o incluso antes del principio, dependiendo de su punto de vista) LINQ se basó explícitamente en SQL y tenía la intención específica de permitir el acceso a datos en bases de datos SQL.
fuente
for
bucles, y Haskell parece bloques de código imperativo de estilo C, por lo que Scala llama a su operación monádicaflatMap
, y Haskell lo llamareturn
por la misma razón: para encajar con la "ilusión" impidió (ex) programadores imperativos.Métodos LINQ en .Net
fueron nombrados para ser coherentes con la sintaxis de consulta LINQ en C # (y VB.NET)
que fue diseñado para ser familiar para las personas que conocen SQL
fuente
Para mí, Seleccionar y agregar tiene más sentido. A medida que la entidad se convierte en el método dominante para consultar y manipular datos en .Net, Linq está siendo utilizado cada vez más por desarrolladores que probablemente están acostumbrados a trabajar con datos a través de SQL. Entonces, usar palabras como "Seleccionar" tiene más sentido para esos desarrolladores, porque esas son las palabras clave a las que están acostumbrados.
fuente
INNER JOIN
día cuando Entity Framework no era una opción. Probablemente todo lo contrario. Cada vez más personas usan LINQ todos los días que evitan activamente escribir SQL. Las personas que se sienten cómodas en SQL probablemente solo hagan más en SQL.