Dalam bahasa pemrograman lain, saya telah melihat Peta dan Mengurangi, dan itu adalah landasan pemrograman fungsional. Saya tidak dapat menemukan alasan atau sejarah mengapa LINQ memiliki Aggregate
(sama dengan Reduce
) dan Select
(sama dengan Map
)?
Mengapa saya bertanya adalah bahwa saya perlu waktu untuk memahaminya adalah hal yang sama dan saya ingin tahu apa alasannya.
Jawaban:
Ini sebagian besar bermuara pada sejarah LINQ.
LINQ awalnya dimaksudkan untuk menjadi seperti SQL, dan digunakan (sebagian besar, meskipun tidak secara eksklusif) untuk terhubung ke database SQL. Ini mengarah ke banyak terminologi yang didasarkan pada SQL.
Jadi, "pilih" berasal dari SQL
select
statement, dan "agregat" berasal dari fungsi agregat SQL (misalnya,count
,sum
,avg
,min
,max
).Bagi mereka yang mempertanyakan sejauh mana LINQ awalnya terkait dengan SQL, saya akan merujuk (misalnya) artikel Microsoft tentang Cω, yang merupakan bahasa yang dirancang oleh Microsoft Research, dan tampaknya menjadi tempat sebagian besar dasar-dasar LINQ bekerja keluar sebelum ditambahkan ke C # dan .NET.
Misalnya, pertimbangkan artikel MSDN di Cω , yang mengatakan:
Setidaknya sejauh yang saya tahu, operator berbasis XPath tidak pernah ditambahkan ke C #, hanya menyisakan operator yang didokumentasikan (sebelum LINQ ada) yang didasarkan langsung pada SQL.
Sekarang, memang benar bahwa LINQ tidak identik dengan operator query berbasis SQL di Cω. Secara khusus, LINQ mengikuti objek dasar dan fungsi pemanggilan fungsi C # lebih dekat daripada Cω. Pertanyaan C followed mengikuti sintaks SQL bahkan lebih dekat, sehingga Anda dapat menulis sesuatu seperti ini (sekali lagi, diambil langsung dari artikel yang ditautkan di atas):
Dan ya, artikel yang sama tidak berbicara secara khusus tentang menggunakan query berbasis SQL untuk meminta data yang berasal dari database SQL yang sebenarnya:
Jadi, ya, dari awal (atau bahkan sebelum awal, tergantung pada sudut pandang Anda) LINQ secara eksplisit didasarkan pada SQL, dan dimaksudkan secara khusus untuk memungkinkan akses ke data dalam database SQL.
sumber
for
loop, dan tampilan Haskell seperti blok kode imperatif gaya-C, dan Scala menyebut operasi monadiknyaflatMap
, dan Haskell menyebutnyareturn
dengan alasan yang sama: untuk menyesuaikan dengan "ilusi" yang dicegah untuk (mantan) programmer penting.Metode LINQ di .Net
dinamai konsisten dengan sintaks query LINQ dalam C # (dan VB.NET)
yang dirancang agar tidak asing bagi orang yang tahu SQL
sumber
Bagi saya, Pilih dan Agregat lebih masuk akal. Ketika entitas menjadi metode dominan untuk query dan memanipulasi data dalam. Net, Linq semakin banyak digunakan oleh pengembang yang mungkin terbiasa bekerja dengan data melalui SQL. Jadi, menggunakan kata-kata seperti "Pilih" lebih masuk akal bagi para pengembang tersebut, karena itulah kata kunci yang biasa mereka gunakan.
sumber
INNER JOIN
satu hari saja ketika Entity Framework bukan pilihan. Mungkin justru sebaliknya. Semakin banyak orang menggunakan LINQ setiap hari yang secara aktif menghindari penulisan SQL. Orang-orang yang nyaman dalam SQL mungkin hanya berbuat lebih banyak dalam SQL.