При отправке запросов мы можем использовать специальные встроенные агрегатные функции SQL, например, Min, Max, Sum, Count и т.д., которые не выполняют операции с объектами и не извлекают объекты, а возвращают какое-то определенное значение. Например, функция Count подсчитывает количество объектов. Подробнее про работу агрегатных функций в MS SQL Server можно посмотреть в статье Агрегатные функции
И для работы с такими функциями в SqlCommand определен специальный метод ExecuteScalar()/ExecuteScalarAsync()
,
который возвращает результат в виде объекта типа object. Например, найдем число всех объектов в таблице,
получим минимальный и средний возраст пользователей:
using Microsoft.Data.SqlClient; using System; using System.Threading.Tasks; namespace HelloApp { class Program { static async Task Main(string[] args) { string connectionString = "Server=(localdb)\\mssqllocaldb;Database=adonetdb;Trusted_Connection=True;"; string sqlExpression = "SELECT COUNT(*) FROM Users"; using (SqlConnection connection = new SqlConnection(connectionString)) { await connection.OpenAsync(); SqlCommand command = new SqlCommand(sqlExpression, connection); object count = await command.ExecuteScalarAsync(); command.CommandText = "SELECT MIN(Age) FROM Users"; object minAge = await command.ExecuteScalarAsync(); command.CommandText = "SELECT AVG(Age) FROM Users"; object avgAge = await command.ExecuteScalarAsync(); Console.WriteLine($"В таблице {count} объектa(ов)"); Console.WriteLine($"Минимальный возраст: {minAge}"); Console.WriteLine($"Средний возраст: {avgAge}"); } Console.Read(); } } }
Выражение "SELECT COUNT(*) FROM Users" количество объектов в таблице Users, а выражение "SELECT MIN(Age) FROM Users"
находит минимальное значение столбца Age. Подобным образом выражение "SELECT AVG(Age) FROM Users" получает среднее значение для столбца Age. В качестве результата метод ExecuteScalarAsync()
возвращает объект типа
object
, который затем можно пробразовать к типу int и использовать как числовые данные.