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

    参数

  • 相关阅读:
    移动端解决fixed和input弹出虚拟键盘时样式错位
    JS的面向对象
    js计算两个时间范围间的间隔秒数
    使用js过滤字符串前后的空格
    C#时间格式-摘自http://www.cnblogs.com/xiaogongzhu/p/3825600.html
    [dp/贪心]435. 无重叠区间-----经典问题
    【dp】Leetcode面试题 17.16. 按摩师
    [dp]Leetcode.376.摆动序列
    Leetcode 945 使数组唯一的最小增量
    LeetCode 365.水壶问题
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11515154.html
Copyright © 2020-2023  润新知