0. FIrst , Single & Defaultsql
使用這個方法時要當心,First 和 Single 是不一樣的。spa
這裏,對這個表作下說明:code
若是使用 First , 當沒有查到元素時,會報錯;若是查到一個元素,會返回這個元素;若是查到多個元素,會返回第一個元素;blog
若是使用 Single , 沒有查到元素會報錯;查到一個元素,則返回這個元素;查到多個元素,則報錯;ip
若是使用 FirstOrDefault , 沒有查到元素會返回默認值;若是查到一個元素,則返回這個元素;若是查到多個元素,則返回第一個元素;string
若是使用 SingleOrDefault , 沒有查到元素返回默認值;若是查到一個元素,則返回這個元素;若是查到多個元素,則報錯;it
1. QueryFirstio
能夠用來查詢和映射第一個結果class
結果能夠被映射到:List
參數
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
執行一個查詢,而且映射第一個結果,或者若是沒查到元素時,返回一個默認值
結果能夠被映射到:
參數
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
執行查詢,而且映射第一個結果,若是查到不止一個元素,則會拋出異常
結果能夠映射到:
參數
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
執行查詢,而且映射第一個結果,或者若是查詢結果爲空,則返回默認值;若是查到不止一個元素,則拋出異常
結果映射到:
參數
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(); } }
參數