2011-11-08 28 views
22

có vẻ như đã có một ExecuteScalar trong Dapper ...là có một ExecuteScalar trong Dapper

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

Được ExecuteScalar đổi tên hoặc loại bỏ?

Bây giờ, điều này có thể đạt được bằng .Query hoặc .Query < T>?

+7

Lý do chúng tôi không bao giờ thêm một đơn giản chỉ là: '.Single()' thực hiện điều tương tự. Chúng tôi đã nghiên cứu các triển khai cơ bản v.v. và không có lợi ích thực sự khi thêm phương thức bổ sung. –

+0

.Single() không phải là phương thức mở rộng Dapper. Đây có phải là một phương pháp cơ bản trong khuôn khổ .net? – sgtz

+1

Ý tôi là: 'int value = conn.Query (sql, args) .Single();', hoặc 'string value = conn.Query (sql, args) .Single();', vv –

Trả lời

19

ExecuteScalar chỉ được thêm vào trong 1,28: https://www.nuget.org/packages/Dapper

+0

Tôi có một chút bối rối bởi điều này, nếu tôi hiểu điều này một cách chính xác, trong phiên bản hiện tại của Dapper (1.42 như ngày 08 tháng 10 năm 2015) có NO vô hướng thực hiện. Chức năng này được thực hiện thông qua phương thức LINQ Single(). Đúng? – dotnetguy

+1

1,42 vẫn có. Nó sử dụng SqlCommand.ExecuteScalar(), có hành vi khác với .Single() và .First() (đáng chú ý là nó sẽ trả về null nếu không có bản ghi nào quay lại). Xem https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar(v=vs.110).aspx –

6

tôi đã có thể gọi ExecuteScalar < T> với phiên bả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

Trong phiên bản 1.50.4 tôi đã có thể gọi connection.QuerySingle<int>(query,params)

+0

Đây không phải là câu trả lời hoàn chỉnh. Tôi khuyên bạn nên làm cho nó một bình luận khi bạn có đại diện. –

Các vấn đề liên quan