Dapper學習(二)之Query相關
0. FIrst , Single & Default
使用這個方法時要小心,First 和 Single 是不同的。
這裡,對這個表做下說明:
如果使用 First , 當沒有查到元素時,會報錯;如果查到一個元素,會返回這個元素;如果查到多個元素,會返回第一個元素;
如果使用 Single , 沒有查到元素會報錯;查到一個元素,則返回這個元素;查到多個元素,則報錯;
如果使用 FirstOrDefault , 沒有查到元素會返回預設值;如果查到一個元素,則返回這個元素;如果查到多個元素,則返回第一個元素;
如果使用 SingleOrDefault , 沒有查到元素返回預設值;如果查到一個元素,則返回這個元素;如果查到多個元素,則報錯;
1. QueryFirst
可以用來查詢和對映第一個結果
結果可以被對映到:
- Anonymous
- Strongly Typed
引數
1.1 Query Anonymous
執行一個查詢,並且對映第一個結果到一個動態集合
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirst(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
1.2 Query Strongly Typed
執行一個查詢,並且對映第一個結果到一個強型別集合
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirst<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
2. QueryFirstOrDefault
執行一個查詢,並且對映第一個結果,或者如果沒查到元素時,返回一個預設值
結果可以被對映到:
- Anonymous
- Strongly Typed
引數
2.1 Query Anonymous
執行一個查詢,並且對映第一個結果到一個動態集合,或者如果沒查到元素,則返回一個預設值
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirstOrDefault(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
2.2 Query Strongly Typed
執行一個查詢,並且對映第一個結果到一個強型別集合,或者如果沒查到元素,則返回一個預設值
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QueryFirstOrDefault<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
3. QuerySingle
執行查詢,並且對映第一個結果,如果查到不止一個元素,則會丟擲異常
結果可以對映到:
- Anonymous
- Strongly Typed
引數
3.1 Query Anonymous
執行查詢,對映第一個結果到一個動態集合,如果查到不止一個元素,丟擲異常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingle(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
3.2 Query Strongly Typed
執行查詢,並且對映第一個結果到一個強型別集合,如果查到不止一個元素,則丟擲異常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingle<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
4. QuerySingleOrDefault
執行查詢,並且對映第一個結果,或者如果查詢結果為空,則返回預設值;如果查到不止一個元素,則丟擲異常
結果對映到:
- Anonymous
- Strongly Typed
引數
4.1 Query Anonymous
執行查詢,並且對映第一個結果到一個動態集合,或者如果查詢結果為空,則返回一個預設值;如果查到不止一個元素,則丟擲異常。
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingleOrDefault(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(orderDetail); }
4.2 Query Strongly Typed
執行查詢,並且對映第一個結果到一個強型別集合,或者如果查詢結果為空,則返回一個預設值;如果查到不止一個元素,則丟擲異常
string sql = "SELECT * FROM OrderDetails WHERE OrderDetailID = @OrderDetailID;"; using (var connection = new SqlConnection(FiddleHelper.GetConnectionStringSqlServerW3Schools())) { var orderDetail = connection.QuerySingleOrDefault<OrderDetail>(sql, new {OrderDetailID = 1}); FiddleHelper.WriteTable(new List<OrderDetail>() { orderDetail }); }
5. QueryMultiple
它可以在同一個命令中執行多個查詢,並且對映到結果中
string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;"; using (var connection = My.ConnectionFactory()) { connection.Open(); using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1})) { var invoice = multi.Read<Invoice>().First(); var invoiceItems = multi.Read<InvoiceItem>().ToList(); } }
引數
&n