Получение скалярных значений

Последнее обновление: 09.02.2021

При отправке запросов мы можем использовать специальные встроенные агрегатные функции 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 и использовать как числовые данные.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850