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:
Operator Permintaan di Cω
Cω menambahkan dua kelas luas operator kueri ke bahasa C #:
- Operator berbasis XPath untuk menanyakan variabel anggota objek berdasarkan nama atau jenis.
- Operator berbasis SQL untuk melakukan kueri canggih yang melibatkan proyeksi, pengelompokan, dan penggabungan data dari satu objek atau lebih.
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):
rows = select c.ContactName, o.ShippedDate
from c in DB.Customers
inner join o in DB.Orders
on c.CustomerID == o.CustomerID;
Dan ya, artikel yang sama tidak berbicara secara khusus tentang menggunakan query berbasis SQL untuk meminta data yang berasal dari database SQL yang sebenarnya:
Untuk terhubung ke database SQL di Cω, itu harus diekspos sebagai kumpulan terkelola (yaitu, file perpustakaan .NET), yang kemudian direferensikan oleh aplikasi. Database relasional dapat diekspos ke Cω sebagai rakitan terkelola baik dengan menggunakan alat baris perintah sql2comega.exe atau dialog Tambah Database Skema ... dari dalam Visual Studio. Objek database digunakan oleh Cω untuk mewakili database relasional yang di-host oleh server. Sebuah database objek memiliki properti publik untuk setiap tabel atau melihat, dan metode untuk setiap fungsi meja-nilai yang ditemukan dalam database. Untuk meminta basis data relasional, fungsi tabel, tampilan, atau nilai tabel harus ditentukan sebagai input ke satu atau lebih operator berbasis SQL.
Program sampel dan output berikut menunjukkan beberapa kemampuan menggunakan operator berbasis SQL untuk query database relasional di Cω. Basis data yang digunakan dalam contoh ini adalah contoh basis data Northwind yang dilengkapi dengan Microsoft SQL Server. Nama DB yang digunakan dalam contoh ini merujuk ke turunan global dari objek Database di Northwind namespace dari perakitan Northwind.dll yang dihasilkan menggunakan sql2comega.exe .
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.