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