Dapper學習(二)之Query相關

 

0. FIrst , Single & Defaultsql

使用這個方法時要當心,First 和 Single 是不一樣的。spa

 這裏,對這個表作下說明:code

若是使用 First , 當沒有查到元素時,會報錯;若是查到一個元素,會返回這個元素;若是查到多個元素,會返回第一個元素;blog

若是使用 Single , 沒有查到元素會報錯;查到一個元素,則返回這個元素;查到多個元素,則報錯;ip

若是使用 FirstOrDefault , 沒有查到元素會返回默認值;若是查到一個元素,則返回這個元素;若是查到多個元素,則返回第一個元素;string

若是使用 SingleOrDefault , 沒有查到元素返回默認值;若是查到一個元素,則返回這個元素;若是查到多個元素,則報錯;it

1. QueryFirstio

能夠用來查詢和映射第一個結果class

結果能夠被映射到:List

  • 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();
    }
}

參數

相關文章
相關標籤/搜索