Это в основном сводится к истории LINQ.
Изначально LINQ задумывался как SQL-интерфейс и использовался (в основном, но не исключительно) для подключения к базам данных SQL. Это приводит к тому, что большая часть его терминологии основана на SQL.
Таким образом, «выберите» пришел из SQL select
заявления, а «агрегат» пришел из агрегатных функций SQL (например, count
, sum
, avg
, min
, max
).
Для тех, кто ставит под сомнение степень, в которой LINQ изначально относился к SQL, я хотел бы сослаться (например) на статьи Microsoft о Cω, который был разработан Microsoft Research и, по-видимому, именно там работала большая часть основ LINQ. до того, как они были добавлены в C # и .NET.
Например, рассмотрим статью MSDN о Cω , в которой говорится:
Операторы запросов в Cω
Cω добавляет два широких класса операторов запросов к языку C #:
- Операторы на основе XPath для запроса переменных-членов объекта по имени или по типу.
- Операторы на основе SQL для выполнения сложных запросов, включающих проецирование, группирование и объединение данных из одного или нескольких объектов.
По крайней мере, насколько мне известно, операторы на основе XPath никогда не добавлялись в C #, оставляя только те операторы, которые были задокументированы (до того, как существовал LINQ), как основанные непосредственно на SQL.
Теперь, безусловно, верно, что LINQ не идентичен операторам запросов на основе SQL в Cω. В частности, LINQ следует синтаксису базовых объектов и вызовов функций в C # гораздо ближе, чем Cω. Запросы Cω следовали синтаксису SQL еще более тесно, поэтому вы можете написать что-то вроде этого (опять же, прямо из статьи, приведенной выше):
rows = select c.ContactName, o.ShippedDate
from c in DB.Customers
inner join o in DB.Orders
on c.CustomerID == o.CustomerID;
И да, в той же статье говорится конкретно об использовании запросов на основе SQL для запроса данных, поступающих из реальных баз данных SQL:
Чтобы подключиться к базе данных SQL в Cω, она должна быть представлена как управляемая сборка (то есть файл библиотеки .NET), на которую затем ссылается приложение. Реляционная база данных может быть представлена Cω как управляемая сборка с помощью средства командной строки sql2comega.exe или диалога Add Database Schema ... из Visual Studio. Объекты базы данных используются Cω для представления реляционной базы данных, размещенной на сервере. Объект базы данных имеет открытое свойство для каждой таблицы или представления, а также метод для каждой табличной функции, найденной в базе данных. Для запроса реляционной базы данных необходимо указать таблицу, представление или табличную функцию в качестве входных данных для одного или нескольких операторов на основе SQL.
В следующем примере программы и вывода показаны некоторые возможности использования операторов на основе SQL для запроса реляционной базы данных в Cω. В этом примере используется база данных Northwind, которая поставляется с Microsoft SQL Server. Имя БД , используемое в примере относится к глобальному экземпляру объекта базы данных в Northwind пространства имен Northwind.dll сборки , генерируемых с использованием sql2comega.exe .
Итак, да, с самого начала (или даже до начала, в зависимости от вашей точки зрения) LINQ явно основывался на SQL и предназначался специально для предоставления доступа к данным в базах данных SQL.