2011-11-08 23 views
22

parece que hubo un ExecuteScalar en Dapper ...¿hay una ExecuteScalar en Dapper

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

Fue ExecuteScalar cambiado de nombre o eliminado?

¿Se puede lograr esto ahora con .Query o .Query < T>?

+7

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

+0

.Single() no está comenzando como un método de extensión Dapper. ¿Esto está en un método subyacente en el marco .net? – sgtz

+1

Quiero decir: 'int value = conn.Query (sql, args) .Single();', o 'string value = conn.Query (sql, args) .Single();', etc –

Respuesta

19

ExecuteScalar simplemente se añadió en 1,28: https://www.nuget.org/packages/Dapper

+0

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

+1

1.42 todavía lo tiene. Utiliza el SqlCommand.ExecuteScalar() subyacente, que tiene un comportamiento diferente de .Single() y .First() (en particular, devolverá nulo si no vuelve ningún registro). Consulte https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx –

6

pude llamar 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; 
     } 
    } 
0

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

+0

Esta no es una respuesta completa. Recomiendo hacer un comentario cuando tengas el representante. –