есть ли ExecuteScalar в Dapper

похоже, в Dapper был ExecuteScalar...

http://code.google.com/p/dapper-dot-net/issues/attachmentText?id=22&aid=220000000&name=ExecuteScalar.cs&token=9e2fd8899022f507b140ffb883c60e34

Был ли ExecuteScalar переименован или удален?

Теперь этого можно добиться с помощью .Query или .Query‹T>?


person sgtz    schedule 08.11.2011    source источник
comment
Причина, по которой мы никогда его не добавляли, проста: .Single() делает то же самое. Мы исследовали базовые реализации и т. д., и нет никакой реальной пользы в добавлении дополнительного метода.   -  person Marc Gravell    schedule 08.11.2011
comment
.Single() не подходит как метод расширения Dapper. Это базовый метод в .net framework?   -  person sgtz    schedule 08.11.2011
comment
Я имею в виду: int value = conn.Query<int>(sql, args).Single(); или string value = conn.Query<string>(sql, args).Single(); и т. д.   -  person Marc Gravell    schedule 08.11.2011
comment
обратите внимание, это вложение, на которое вы ссылаетесь ... этого никогда не было в ядре   -  person Sam Saffron    schedule 11.11.2011
comment
@Sam Saffron: я ценю это. Сначала я смотрел на это с точки зрения интерфейса C # + адаптировал старый код. Ответ Марка об использовании LINQ .Single() гораздо более элегантен. Такое простое прикосновение делает структуру намного проще. К вашему сведению: я только что заменил некоторые самодельные командные объекты на Dapper. У нас не было кэширования команд sql, и мы полагались на кешированные свойства отражения для параметров + вставляли их через токенизированные блоки sql через StringBuilder. Это работало нормально, но Dapper стал более лаконичным и простым в использовании. Он чувствует себя более твердым. Спасибо ТАК.   -  person sgtz    schedule 11.11.2011
comment
@Sam Saffron: ... также не понимал, что это никогда не было частью ядра. Когда я разместил вопрос, я ознакомился с проектом с открытым исходным кодом.   -  person sgtz    schedule 11.11.2011


Ответы (3)


ExecuteScalar был только что добавлен в версии 1.28: https://www.nuget.org/packages/Dapper.

person Evan M    schedule 12.08.2014
comment
Меня это немного смутило, если я правильно понимаю, в текущей версии Dapper (1.42 от 8 октября 2015 года) НЕТ скаляра выполнения. Функциональность достигается с помощью метода LINQ Single(). Верно? - person Sudhanshu Mishra; 08.10.2015
comment
В 1.42 еще есть. Он использует лежащий в основе SqlCommand.ExecuteScalar(), поведение которого отличается от поведения .Single() и .First() (в частности, он возвращает значение null, если не возвращаются никакие записи). См. msdn. microsoft.com/en-us/library/ - person Evan M; 08.10.2015

Мне удалось вызвать ExecuteScalar‹ T > с версией 1.42.0.

    public Boolean BeforeToday(DateTime dateInQuestion)
    {
        try
        {
            using (var conn = new SqlConnection(ConnectionString))
            {
                String sql = @"SELECT CONVERT(bit, CASE WHEN getdate() > @dateParameter THEN 1 ELSE 0 END) AS BeforeToday";

                var result = conn.ExecuteScalar<Boolean>(sql, new { dateParameter = dateInQuestion });

                return result;
            }
        }
        catch (Exception)
        {
            return dateInQuestion < DateTime.Now;
        }
    }
person Doug Dekker    schedule 05.05.2016

В версии 1.50.4 я смог позвонить connection.QuerySingle<int>(query,params)

person N.Rybchenko    schedule 28.11.2017
comment
То же, что и conn.ExecuteScalar<T> ? - person Kiquenet; 10.05.2019