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