2011-11-08 16 views
22

wygląda wystąpił ExecuteScalar w Dapper ...jest tam ExecuteScalar w Dapper

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

Czy ExecuteScalar przemianowany lub usunięty?

Czy można to teraz osiągnąć za pomocą .Query lub .Query < T>?

+7

Powodem, dla którego nigdy go nie dodaliśmy, jest po prostu: '.Single()' robi to samo. Zbadaliśmy podstawowe implementacje itp. I nie ma prawdziwej korzyści z dodania dodatkowej metody. –

+0

. Singiel() nie pojawia się jako metoda rozszerzenia Dapper. Czy jest to podstawowa metoda w strukturze .net? – sgtz

+1

Mam na myśli: 'int value = conn.Query (sql, args) .Single();' lub 'string value = conn.Query (sql, args). Singel();', itp. –

Odpowiedz

19

ExecuteScalar po prostu dodaje się 1,28: https://www.nuget.org/packages/Dapper

+0

Jestem trochę zdezorientowany, jeśli dobrze to rozumiem, w obecnej wersji Dappera (1.42 na dzień 8 października 2015 r.) Nie ma żadnego skalaru wykonania. Funkcjonalność osiąga się za pomocą metody LINQ Single(). Dobrze? – dotnetguy

+1

1.42 nadal go ma. Używa bazowej SqlCommand.ExecuteScalar(), która ma inne zachowanie niż .Single() i .First() (w szczególności zwróci wartość null, jeśli żadne rekordy nie powrócą). Zobacz https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(vsv.110).aspx –

6

udało mi się zadzwonić ExecuteScalar < T> z wersją 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

W wersji 1.50.4 udało mi się zadzwonić connection.QuerySingle<int>(query,params)

+0

To nie jest pełna odpowiedź. Polecam zrobić komentarz, gdy masz przedstawiciela. –