Em outras linguagens de programação, vi Map and Reduce, e esses são os pilares da programação funcional. Não foi possível encontrar nenhum raciocínio ou histórico por que o LINQ tem Aggregate
(o mesmo que Reduce
) e Select
(o mesmo que Map
)?
Por que estou perguntando é que demorei um pouco para entender que é a mesma coisa e estou curioso para saber qual é o motivo disso.
.net
language-design
linq
Tx3
fonte
fonte
Respostas:
Isso se resume principalmente à história do LINQ.
O LINQ foi originalmente projetado para ser semelhante ao SQL e usado (amplamente, embora não exclusivamente) para conectar-se aos bancos de dados SQL. Isso faz com que grande parte de sua terminologia seja baseada em SQL.
Assim, "select" veio do SQL
select
declaração, e "agregado" veio de funções agregadas SQL (por exemplo,count
,sum
,avg
,min
,max
).Para aqueles que questionam o grau em que o LINQ originalmente se relacionava com o SQL, eu me referiria (por exemplo) aos artigos da Microsoft sobre Cω, que foi uma linguagem criada pela Microsoft Research, e parece ser o local onde a maioria dos conceitos básicos do LINQ foram trabalhados. antes de serem adicionados ao C # e .NET.
Por exemplo, considere um artigo do MSDN sobre Cω , que diz:
Pelo menos até onde eu sei, os operadores baseados em XPath nunca foram adicionados ao C #, deixando apenas os operadores documentados (antes da existência do LINQ) como baseados diretamente no SQL.
Agora, certamente é verdade que o LINQ não é idêntico aos operadores de consulta baseados em SQL no Cω. Em particular, o LINQ segue os objetos básicos do C # e a sintaxe das chamadas de função muito mais de perto do que o Cω. As consultas Cω seguiram a sintaxe SQL ainda mais de perto, para que você pudesse escrever algo assim (novamente, extraído diretamente do artigo vinculado acima):
E sim, o mesmo artigo fala especificamente sobre o uso de consultas baseadas em SQL para consultar dados provenientes de bancos de dados SQL reais:
Portanto, sim, desde o início (ou mesmo antes do início, dependendo do seu ponto de vista), o LINQ era explicitamente baseado em SQL e pretendia especificamente permitir o acesso a dados em bancos de dados SQL.
fonte
for
loops, e Haskell se parece com blocos de código imperativos no estilo C, e então Scala chama sua operação monádicaflatMap
, e Haskell chamareturn
pelo mesmo motivo: se encaixar na "ilusão" impedida de programadores imperativos.Métodos LINQ em .Net
foram nomeados para serem consistentes com a sintaxe da consulta LINQ em C # (e VB.NET)
que foi projetado para ser familiar para pessoas que conhecem SQL
fonte
Para mim, Selecionar e Agregar faz mais sentido. À medida que a entidade se torna o método dominante para consultar e manipular dados no .Net, o Linq está sendo usado cada vez mais por desenvolvedores que provavelmente estão acostumados a trabalhar com dados por meio do SQL. Portanto, usar palavras como "Selecionar" faz mais sentido para esses desenvolvedores, porque essas são as palavras-chave às quais estão acostumadas.
fonte
INNER JOIN
dia em que o Entity Framework não era uma opção. Provavelmente muito pelo contrário. Mais e mais pessoas usam o LINQ todos os dias , evitando ativamente a gravação de SQL. As pessoas que se sentem confortáveis no SQL provavelmente apenas fazem mais no SQL.