¿Hay un ExecuteScalar en Dapper?

parece que había un ExecuteScalar en Dapper ...

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

¿Se renombró o eliminó ExecuteScalar?

¿Se puede lograr esto ahora con .Query o .Query? ?

preguntado el 08 de noviembre de 11 a las 12:11

La razón por la que nunca agregamos uno es simplemente: .Single() hace lo mismo. Investigamos las implementaciones subyacentes, etc., y no hay ningún beneficio real en agregar un método adicional. -

.Single () no aparece como un método de extensión Dapper. ¿Es esto en un método subyacente en el marco .net? -

Quiero decir: int value = conn.Query<int>(sql, args).Single();y string value = conn.Query<string>(sql, args).Single();, etc -

tenga en cuenta, ese es un archivo adjunto al que se vinculó ... esto nunca existió en el núcleo -

@Sam Saffron: Te lo agradezco. Primero lo estaba mirando desde un ángulo de interfaz C # + estaba adaptando el código antiguo. La respuesta de Marc sobre el uso de .Single () de LINQ es mucho más elegante. Un simple toque como este hace que el marco sea mucho más simple. FYI: Acabo de reemplazar algunos objetos de mando de cosecha propia con Dapper. No teníamos almacenamiento en caché de "comandos" sql y nos apoyamos en las propiedades de reflexión almacenadas en caché para los parámetros + los insertamos a través de losas sql tokenizadas a través de StringBuilder. Funcionó bien, pero Dapper es más conciso y más fácil de usar. Se siente más sólido. Gracias. -

3 Respuestas

ExecuteScalar se acaba de agregar en 1.28: https://www.nuget.org/packages/Dapper

Respondido 13 ago 14, 01:08

Me confundí un poco con esto, si lo entiendo correctamente, en la versión actual de Dapper (1.42 como el 8 de octubre de 2015) NO hay escalar de ejecución. La funcionalidad se logra mediante el método LINQ Single (). ¿Derecha? - Sudhanshu Mishra

1.42 todavía lo tiene. Utiliza el SqlCommand.ExecuteScalar () subyacente, que tiene un comportamiento diferente al de .Single () y .First () (en particular, devolverá nulo si no hay registros). Ver msdn.microsoft.com/en-us/library/… - Evan M

Pude llamar a ExecuteScalar <T> con la versión 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;
        }
    }

contestado el 05 de mayo de 16 a las 21:05

En la versión 1.50.4 pude llamar connection.QuerySingle<int>(query,params)

respondido 28 nov., 17:10

Lo mismo que conn.ExecuteScalar<T> ? - Kiquenet

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.