博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Dapper官方教程翻译3:Dapper方法之Query(转)
阅读量:5154 次
发布时间:2019-06-13

本文共 2747 字,大约阅读时间需要 9 分钟。

Dapper官方教程翻译3:Dapper方法之Query

Query方法描述

 

Query方法也是一个扩展方法,可以被IDbConnection对象调用,可以执行查询语句,并且映射到结果。

可以映射的类型:

  • (多类型)

 

Query方法可使用的参数

 

Query方法参数说明
参数名 参数说明
sql 数据库语句
param 查询参数
transaction 所使用的事务
buffered 是否缓存
commandTimeout 执行超时时间
commandType 语句类型

 

示例:Query执行匿名类型

  1.  
    string sql = "SELECT TOP 10 * FROM OrderDetails";
  2.  
     
  3.  
    using (var connection = new SqlCeConnection("Data Source=SqlCe_W3Schools.sdf"))
  4.  
    {
  5.  
    //使用var进行类型推断
  6.  
    var orderDetail = connection.Query(sql).FirstOrDefault();
  7.  
     
  8.  
    FiddleHelper.WriteTable(orderDetail);
  9.  
    }

示例:Query执行强类型查询

  1.  
    string sql = "SELECT TOP 10 * FROM OrderDetails";
  2.  
     
  3.  
    using (var connection = new SqlCeConnection("Data Source=SqlCe_W3Schools.sdf"))
  4.  
    {
  5.  
    var orderDetails = connection.Query<OrderDetail>(sql).ToList();
  6.  
     
  7.  
    Console.WriteLine(orderDetails.Count);
  8.  
     
  9.  
    FiddleHelper.WriteTable(orderDetails);
  10.  
    }

示例:执行一对一关系查询

  1.  
    string sql = "SELECT * FROM Invoice AS A INNER JOIN InvoiceDetail AS B ON A.InvoiceID = B.InvoiceID;";
  2.  
     
  3.  
    using (var connection = My.ConnectionFactory())
  4.  
    {
  5.  
    connection.Open();
  6.  
     
  7.  
    var invoices = connection.Query<Invoice, InvoiceDetail, Invoice>(
  8.  
    sql,
  9.  
    (invoice, invoiceDetail) =>
  10.  
    {
  11.  
    invoice.InvoiceDetail = invoiceDetail;
  12.  
    return invoice;
  13.  
    },
  14.  
    splitOn:
    "InvoiceID")
  15.  
    .Distinct()
  16.  
    .ToList();
  17.  
    }

示例:执行一对多关系查询

  1.  
    string sql = "SELECT TOP 10 * FROM Orders AS A INNER JOIN OrderDetails AS B ON A.OrderID = B.OrderID;";
  2.  
     
  3.  
    using (var connection = new SqlCeConnection("Data Source=SqlCe_W3Schools.sdf"))
  4.  
    {
  5.  
    var orderDictionary = new Dictionary<int, Order>();
  6.  
     
  7.  
     
  8.  
    var list = connection.Query<Order, OrderDetail, Order>(
  9.  
    sql,
  10.  
    (order, orderDetail) =>
  11.  
    {
  12.  
    Order orderEntry;
  13.  
     
  14.  
    if (!orderDictionary.TryGetValue(order.OrderID, out orderEntry))
  15.  
    {
  16.  
    orderEntry = order;
  17.  
    orderEntry.OrderDetails =
    new List<OrderDetail>();
  18.  
    orderDictionary.Add(orderEntry.OrderID, orderEntry);
  19.  
    }
  20.  
     
  21.  
    orderEntry.OrderDetails.Add(orderDetail);
  22.  
    return orderEntry;
  23.  
    },
  24.  
    splitOn:
    "OrderID")
  25.  
    .Distinct()
  26.  
    .ToList();
  27.  
     
  28.  
    Console.WriteLine(list.Count);
  29.  
     
  30.  
    FiddleHelper.WriteTable(list);
  31.  
    FiddleHelper.WriteTable(list.First().OrderDetails);
  32.  
    }

示例:Query执行多类型

  1.  
    string sql = "SELECT * FROM Invoice;";
  2.  
     
  3.  
    using (var connection = My.ConnectionFactory())
  4.  
    {
  5.  
    connection.Open();
  6.  
     
  7.  
    var invoices = new List<Invoice>();
  8.  
     
  9.  
    using (var reader = connection.ExecuteReader(sql))
  10.  
    {
  11.  
    var storeInvoiceParser = reader.GetRowParser<StoreInvoice>();
  12.  
    var webInvoiceParser = reader.GetRowParser<WebInvoice>();
  13.  
     
  14.  
    while (reader.Read())
  15.  
    {
  16.  
    Invoice invoice;
  17.  
     
  18.  
    switch ((InvoiceKind) reader.GetInt32(reader.GetOrdinal("Kind")))
  19.  
    {
  20.  
    case InvoiceKind.StoreInvoice:
  21.  
    invoice = storeInvoiceParser(reader);
  22.  
    break;
  23.  
    case InvoiceKind.WebInvoice:
  24.  
    invoice = webInvoiceParser(reader);
  25.  
    break;
  26.  
    default:
  27.  
    throw new Exception(ExceptionMessage.GeneralException);
  28.  
    }
  29.  
     
  30.  
    invoices.Add(invoice);
  31.  
    }
  32.  
    }
  33.  
     
  34.  
    My.Result.Show(invoices);
  35.  
    }

 

转载于:https://www.cnblogs.com/LiZhongZhongY/p/10991643.html

你可能感兴趣的文章
植物大战僵尸中文年度版
查看>>
26、linux 几个C函数,nanosleep,lstat,unlink
查看>>
投标项目的脚本练习2
查看>>
201521123107 《Java程序设计》第9周学习总结
查看>>
Caroline--chochukmo
查看>>
算法导论笔记 第8章 线性时间排序
查看>>
利用jquery的contains实现搜索功能
查看>>
iOS之文本属性Attributes的使用
查看>>
从.Net版本演变看String和StringBuilder性能之争
查看>>
Excel操作 Microsoft.Office.Interop.Excel.dll的使用
查看>>
解决Ubuntu下博通网卡驱动问题
查看>>
【bzoj2788】Festival
查看>>
执行gem install dryrun错误
查看>>
Java SE之正则表达式一:概述
查看>>
HTML5简单入门系列(四)
查看>>
实现字符串反转
查看>>
转载:《TypeScript 中文入门教程》 5、命名空间和模块
查看>>
苹果开发中常用英语单词
查看>>
[USACO 1.4.3]等差数列
查看>>
Shader Overview
查看>>