首页 > 其他分享 >Dapper官方文档(七)【结果之匿名类型,强类型,多映射,多结果,多类型】

Dapper官方文档(七)【结果之匿名类型,强类型,多映射,多结果,多类型】

时间:2023-12-29 16:33:27浏览次数:45  
标签:InvoiceID 映射 var connection 文档 invoice sql 类型 Dapper

结果匿名

描述

可以使用扩展方法执行查询并使用动态类型映射结果。

匿名类型结果可以从以下扩展方法映射:

  • Query
  • QueryFirst
  • QueryFirstOrDefault
  • QuerySingle
  • QuerySingleOrDefault

这些扩展方法可以从IDbConnection类型的任意对象中调用。

案例 - Query

Query方法可以执行查询并将结果映射到动态类型列表。

string sql = "SELECT * FROM Invoice;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoices = connection.Query(sql).ToList();
} 

案例 - QueryFirst

QueryFirst方法可以执行查询并将第一个结果映射到动态类型列表。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QueryFirst(sql, new {InvoiceID = 1});
}

案例 - QueryFirstOrDefault

QueryFirstOrDefault方法可以执行查询并将第一个结果映射到动态类型列表,如果序列不包含任何元素则为默认值

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QueryFirstOrDefault(sql, new {InvoiceID = 1});
}

  

案例 - QuerySingle

QuerySingle方法可以执行查询并将第一个结果映射到动态类型列表,如果序列中没有元素则会引发异常。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QuerySingle(sql, new {InvoiceID = 1});
}

  

案例 - QuerySingleOrDefault

QuerySingleOrDefault方法可以执行查询并将第一个结果映射到动态类型列表,如果序列为空则为默认值;如果序列中有多个元素,则此方法将引发异常。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QuerySingleOrDefault(sql, new {InvoiceID = 1});
}

  

结果强类型

描述

可以使用扩展方法执行查询并使用动态类型映射结果。

强类型结果可以从以下扩展方法映射:

  • Query
  • QueryFirst
  • QueryFirstOrDefault
  • QuerySingle
  • QuerySingleOrDefault

这些扩展方法可以从IDbConnection类型的任意对象中调用。

案例 - Query

Query方法可以执行查询并将结果映射到强类型列表

string sql = "SELECT * FROM Invoice;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoices = connection.Query<Invoice>(sql).ToList();
}

  

案例 - QueryFirst

QueryFirst方法可以执行查询并将第一个结果映射到强类型列表

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QueryFirst<Invoice>(sql, new {InvoiceID = 1});
}

  

案例 - QueryFirstOrDefault

QueryFirstOrDefault方法可以执行查询并将第一个结果映射到强类型列表,如果序列不包含任何元素则为默认值。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QueryFirstOrDefault<Invoice>(sql, new {InvoiceID = 1});
}

  

案例 - QuerySingle

QuerySingle方法可以执行查询并将第一个结果映射到强类型列表,如果序列中没有元素则会引发异常。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QuerySingle<Invoice>(sql, new {InvoiceID = 1});
}

  

案例 - QuerySingleOrDefault

QuerySingleOrDefault方法可以执行查询并将第一个结果映射到强类型列表,如果序列为空则为默认值;如果序列中有多个元素,则此方法将引发异常。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    var invoice = connection.QuerySingleOrDefault<Invoice>(sql, new {InvoiceID = 1});
}

  

结果多映射

描述

可以使用扩展方法执行查询并将结果映射到具有关系的强类型列表。

关系可以是:

  • 一对一
  • 一对多

这些扩展方法可以从IDbConnection类型的任意对象中调用。

案例 - 查询多映射(一对一)

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

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();
}

  

案例 - 查询多映射(一对多)

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

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();
}

 

结果多结果

描述

QueryMultiple是一个扩展方法,可以从IDbConnection类型的任意对象中调用。它可以在同一命令中执行多个查询并映射结果。

string sql = "SELECT * FROM Invoice WHERE InvoiceID = @InvoiceID; SELECT * FROM InvoiceItem WHERE InvoiceID = @InvoiceID;";

using (var connection = My.ConnectionFactory())
{
    connection.Open();

    using (var multi = connection.QueryMultiple(sql, new {InvoiceID = 1}))
    {
        var invoice = multi.Read<Invoice>().First();
        var invoiceItems = multi.Read<InvoiceItem>().ToList();
    }
}

  

结果多类型

描述

ExecuteReader是一个扩展方法,可以从IDbConnection类型的任意对象中调用。它可以执行查询并将结果映射到不同类型的列表。

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);
        }
    }
}

  引用:https://blog.csdn.net/WuLex/article/details/108317090

 

  

标签:InvoiceID,映射,var,connection,文档,invoice,sql,类型,Dapper
From: https://www.cnblogs.com/friend/p/17935192.html

相关文章

  • 导出mysql表结构设计文档word
    github上有个很好用的工具:https://github.com/msuno/export-database-structure我使用的数据库MySQL8.0.20一、下载后修改1.pom中的oracle下载失败,解决办法:注释即可,无影响<!--<dependency>--><!--<groupId>com.oracle</groupId>--><!--<artifactId>o......
  • 字典类型的写法与定义
    #定义一个字典,保存一个同学的信息数据a={'姓名':'罗科','英文名':'ROCCO','年龄':32,'身高':170}print(len(a))#获取数据值长度#写法:字典类型:{键:值}#定义:数据中是对应关系时,用字典类型来保存数据'''特点1、字典类型中的数据是有对应关系2、字典类型中的键(冒号前面)是唯一......
  • 【Flink系列二十一】深入理解 JVM的类型加载约束,解决 Flink 类型加载冲突问题的通用方
    classByteArrayDeserializerisnotaninstanceoforg.apache.kafka.common.serialization.DeserializerDebuggingClassloading类似的XcannotbecasttoXexceptions如何理解这类异常?这类异常可以归纳为类型异常,按个人有限经验,现象分为两种常见情况:类型赋值检查:不能......
  • Go语言变量类型
     一、基本类型1.数字型2.字符串3.布尔型二、派生类型指针、数组、切片、Map、结构体 三、数字类型1、整型int8、int16、int32、int64、uint8、uint16、uint32、uint642、浮点型float32、float643、复数型......
  • JAVA学习12-28 数据类型
    数据类型学习publicclassDemo01{publicstaticvoidmain(String[]args){//单行注释/*多行注释*//*不能用关键字来做标识符*//*标识符可以大写字母,小写字母,美元符号,下划线_开头,不能以关键字作为变量名或方法名,-......
  • 数据类型&变量&表达式总结
    总结数据类型转换概念:数据从一种数据类型转换为另外一种类型为什么需要数据类型转换?节约内存空间业务需要java中的数据类型转换分类向上转型:从小范围的数据转换为大范围的数据类型,自动发生byteb=10;//局部变量shorts=b;//发生数据类型转换,向上......
  • 数据类型转换&表达式&运算符总结
    总结数据类型转换概念:将数据从一种格式或结构转换为另一种格式或结构的过程。作用:节约内存空间将一些类型转换为项目所需要的类型类型转换分类自动隐式转换定义:将小的数据类型转换大的数据类型注意事项:在Java中,boolean类型与所有其他7种类型都不能......
  • 【python爬虫课程设计】类型数据爬取+数据可视化
    【python爬虫课程设计】类型数据爬取+数据可视化选题的背景稀土掘金作为国内最大的开发者社区,汇集了大量优质的技术文章和资源。通过爬取稀土掘金数据,可以深入了解当前技术领域的热点、趋势以及开发者的需求,为相关企业和机构提供有价值的参考信息。预期目标是分析热门技术主题、......
  • Go Lang中的数据类型
    Go的数据类型可以分为,基础数据类型和派生数据类型基础数据类型数值型(int,uint,float)字符型(bype)布尔型(bool)字符串(string)派生类型指针数组结构体管道函数切片接口map基础类型的申明代码variint=1;varsstring="hello";varbboo......
  • 无涯教程-Java泛型 - 无限类型擦除
    如果使用无限制的类型参数,则JavaCompiler会将通用类型的类型参数替换为对象。packagecom.learnfk;publicclassGenericsTester{publicstaticvoidmain(String[]args){Box<Integer>integerBox=newBox<Integer>();Box<String>stringBox=newBo......