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

参数

相关文章
相关标签/搜索