Dapper-Query


描述

Query是一种可被任何IDbConnection类型的对象调用的扩展方法。它可以执行查询并映射一个结果

映射结果如下:

参数

参数名 描述
sql 执行的sql命令脚本
param 执行命令的参数,默认为null
transaction 事务参数,默认为null
buffered 若为true缓存查询结果,默认是true
commandTimeout 命令超时时长,默认为null
commandType 命令类型,默认为null

匿名对象

使用查询方法执行原始 SQL 查询,把返回结果映射给匿名对象

var sql = @"SELECT * FROM Invoice;";
var res = Rep.Query(sql);

强类型

使用查询方法执行原始 SQL 查询,把返回结果映射给强类型集合

var sql = @"SELECT * FROM Invoice;";
var res = Rep.Query<Invoice>(sql);

一对一映射

使用查询方法执行原始 SQL 查询, 并将两张表之间关系是一对一的结果映射到强类型列表中

var sql = "SELECT * FROM Invoice AS A INNER JOIN InvoiceDetail AS B ON A.InvoiceID = B.InvoiceID;";
var invoices = Rep.Query<Invoice, InvoiceDetail, Invoice>(
    sql,
    (invoice, invoiceDetail) =>
    {
        invoice.Detail = invoiceDetail;
        return invoice;
    },
    splitOn: "InvoiceID");

表Invoice和invoiceDetail是一对一关系,splitOn是分割字段

SELECT A.InvoiceID,A.Kind,A.Code,--这些字段会应给实体invoice
    --分割字段B.InvoiceID,
    B.InvoiceID, B.Detail  --这些字段会应给实体invoiceDetail        
FROM Invoice AS A INNER JOIN InvoiceDetail AS B ON A.InvoiceID = B.InvoiceID;

一对多映射

使用查询方法执行原始 SQL 查询, 并将两张表的表关系是一对多的结果映射到强类型列表

string sql = "SELECT * FROM Invoice AS A INNER JOIN InvoiceItem AS B ON A.InvoiceID = B.InvoiceID;";
var invoiceDictionary = new Dictionary<int, Invoice>();
var res=Rep.Query<Invoice, InvoiceItem, Invoice>(
        sql,
        (invoice, invoiceItem) =>
        {
            Invoice invoiceEntry;
            if (!invoiceDictionary.TryGetValue(invoice.InvoiceID, out invoiceEntry))
            {
                invoiceEntry = invoice;
                invoiceEntry.Items = new List<InvoiceItem>();
                invoiceDictionary.Add(invoiceEntry.InvoiceID, invoiceEntry);
            }

            invoiceEntry.Items.Add(invoiceItem);
            return invoiceEntry;
        },
        splitOn: "InvoiceItemID")
        .Distinct();

表Invoice和InvoiceItem是一对多关系,splitOn是分割字段

SELECT A.InvoiceID,A.Kind,A.Code,--这些字段会应给实体invoice
    --分割字段B.InvoiceItemID
    B.InvoiceItemID,B.InvoiceID, B.Code  --这些字段会应给实体InvoiceItem  
ROM Invoice AS A INNER JOIN InvoiceItem AS B ON A.InvoiceID = B.InvoiceID;

示例代码下载


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM