1. 程式人生 > >Dapper學習(二)之Query相關

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