描述
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;