猿教程 Logo

Query

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

结果可以映射到:

  • 匿名类型

  • 强类型

  • 多映射 (一到一)

  • 多映射 (一到多)

  • 多类型


参数

下表显示了Query方法的不同参数。

名称描述
sql

要执行的查询

param

查询参数 (默认为 null)。

transaction

要使用的事务 (默认为 null)。

buffered对于缓冲区读取查询结果(default = true)。
commandTimeout

命令超时 (默认为空)

commandType

命令类型 (默认为 null)



Dapper查询案例:匿名查询

可以使用Query方法执行原始SQL查询,并将结果映射到动态列表。

string sql = "SELECT * FROM Invoice;";
using (var connection = My.ConnectionFactory())
{
    connection.Open();
    var invoices = connection.Query(sql).ToList();
    
    My.Result.Show(invoices);
}



Dapper查询案例:强类型查询

可以使用Query方法执行原始SQL查询,并将结果映射到强类型列表。

string sql = "SELECT * FROM Invoice;";
using (var connection = My.ConnectionFactory())
{
    connection.Open();
    var invoices = connection.Query<Invoice>(sql).ToList();
    
    My.Result.Show(invoices);
}



Dapper查询案例:查询多映射(一对一)

可以使用Query方法执行原始SQL查询,并将结果映射到具有一对一关系的强类型列表。

string sql = "SELECT * FROM Invoice AS A INNER JOIN InvoiceDetail AS B ON A.InvoiceID = B.InvoiceID;";
using (var connection = My.ConnectionFactory())
{
    connection.Open();
    var invoices = connection.Query<Invoice, InvoiceDetail, Invoice>(
            sql,
            (invoice, invoiceDetail) =>
            {
                invoice.InvoiceDetail = invoiceDetail;
                return invoice;
            },
            splitOn: "InvoiceID")
        .Distinct()
        .ToList();
        
    My.Result.Show(invoices);
}



Dapper查询案例:查询多映射(一对多)

可以使用Query方法执行原始SQL查询,并将结果映射到具有一对多关系的强类型列表。

string sql = "SELECT * FROM Invoice AS A INNER JOIN InvoiceItem AS B ON A.InvoiceID = B.InvoiceID;";
using (var connection = My.ConnectionFactory())
{
    connection.Open();
    var invoiceDictionary = new Dictionary<int, Invoice>();
    var invoices = connection.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: "InvoiceID")
        .Distinct()
        .ToList();
        
    My.Result.Show(invoices);
}



Dapper查询案例:查询多类型

可以使用Query方法执行原始SQL查询,并将结果映射到不同类型的列表。

string sql = "SELECT * FROM Invoice;";
using (var connection = My.ConnectionFactory())
{
    connection.Open();
    var invoices = new List<Invoice>();
    using (var reader = connection.ExecuteReader(sql))
    {
        var storeInvoiceParser = reader.GetRowParser<StoreInvoice>();
        var webInvoiceParser = reader.GetRowParser<WebInvoice>();
        while (reader.Read())
        {
            Invoice invoice;
            switch ((InvoiceKind) reader.GetInt32(reader.GetOrdinal("Kind")))
            {
                case InvoiceKind.StoreInvoice:
                    invoice = storeInvoiceParser(reader);
                    break;
                case InvoiceKind.WebInvoice:
                    invoice = webInvoiceParser(reader);
                    break;
                default:
                    throw new Exception(ExceptionMessage.GeneralException);
            }
            invoices.Add(invoice);
        }
    }
    
    My.Result.Show(invoices);
}



版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Dapper/dapper-Query.html