专栏首页逸鹏说道由Dapper QueryMultiple 返回数据的问题

由Dapper QueryMultiple 返回数据的问题

今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapper QueryMultiple 返回数据的问题

多个返回值用QueryMultiple ,这个大家都知道,如果不清楚的看下下面的文档:

这个是官方文档:

Multiple Results

Dapper allows you to process multiple result grids in a single query.

Example:

var sql = 
@"select * from Customers where CustomerId = @idselect * from Orders where CustomerId = @idselect * from Returns where CustomerId = @id";using (var multi = connection.QueryMultiple(sql, new {id=selectedId}))
{   var customer = multi.Read<Customer>().Single();   var orders = multi.Read<Order>().ToList();   var returns = multi.Read<Return>().ToList();
   ...
} 

按照文档来,为啥没数据呢,就ID有值?难道多表只能传一个参数,而且必须有关系???NONONO,如果这么多限制还叫Dapper吗??

给你3s找错误。。。。。

其实就是顺序弄颠倒了,园友可以当个经验==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)

var articleList = multi.Read<Temp>();//类不见得一定得和表名相同 var QQModelList = multi.Read<QQModel>(); var SeoTKDList = multi.Read<SeoTKD>();

官方文档是这样写的,那我们能不能玩点其他的?就一定得定义一个类来获取对应的强类型吗?多返回值就不能动态获取吗???NONONO

直接

if (!multi.IsConsumed)
{
  var articleList = multi.Read();
  var QQModelList = multi.Read();
  var SeoTKDList = multi.Read();
}

一样的效果

周日会有一篇文章详细说下Dapper的,现在得出省了。。。。立刻,马上。。。

附录:

using (SqlConnection conn = new SqlConnection(connStr))
{
    string sqlStr = @"select Id,Title,Author from Article where Id = @Id
                      select * from QQModel where Name = @Name
                      select * from SeoTKD where Status = @Status";
    conn.Open();
    using (var multi = conn.QueryMultiple(sqlStr, new { Id = 11, Name = "打代码", Status = 99 }))
    {
        //multi.IsConsumed   reader的状态 ,true 是已经释放
        if (!multi.IsConsumed)
        {
            ////强类型
            ////注意一个东西,Read获取的时候必须是按照上面返回表的顺序 (article,qqmodel,seotkd)
            //var articleList = multi.Read<Temp>();//类不见得一定得和表名相同
            //var QQModelList = multi.Read<QQModel>();
            //var SeoTKDList = multi.Read<SeoTKD>();
 
            ////动态类型
            var articleList = multi.Read();
            var QQModelList = multi.Read();
            var SeoTKDList = multi.Read();
 
            #region 输出
            foreach (var item in QQModelList)
            {
                Console.WriteLine(item.Id + " " + item.Name + " " + item.Count);
            }
            foreach (var item in SeoTKDList)
            {
                Console.WriteLine(item.Id + " | " + item.SeoKeywords);
            }
            foreach (var item in articleList)
            {
                Console.WriteLine(item.Author);
            }
            #endregion
        }
 
    }
}

本文分享自微信公众号 - 我为Net狂(dotNetCrazy),作者:杜李天

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-02-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Session分布式共享 = Session + Redis + Nginx

    一、Session 1、Session 介绍 我相信,搞Web开发的对Session一定再熟悉不过了,所以我就简单的介绍一下。 Sess...

    逸鹏
  • 几个比较有意思的JS脚本

    1.获取内网和公网真实IP地址(引用地址) 代码太长,见原文链接 2.获得flash版本(在线地址) ? <!DOCTYPE html> <html> <hea...

    逸鹏
  • Ubuntu离线安装VSCode(附带前期准备工作)

    跨平台系列汇总:http://www.cnblogs.com/dunitian/p/4822808.html#linux 在说正式步骤前先把准备工作做到位: 1...

    逸鹏
  • SAAS微服务脚手架推荐

    基于SpringCloud(Hoxton.SR3) + SpringBoot(2.2.6.RELEASE) 的SaaS 微服务脚手架,具有统一授权、认证后台管理...

    物流IT圈
  • 使用Tensorflow Lite在Android上构建自定义机器学习模型

    机器学习有许多用处,并提供了一个充满未知性的世界。然而,有些人可能会退缩,认为它太难了,其实并不是这样的。使用TensorFlow Lite并不一定都是机器学习...

    AiTechYun
  • 框架-Tomcat BIO、NIO Connector原理

    重点摘要:BIO(同步阻塞IO)、NIO(同步非阻塞IO)、AIO(异步IO)、线程池、Selector(选择器)、Buffer(缓冲)、Channel(通道)

    秋日芒草
  • MYSQL 5.7 到底 OPTIMIZE Table 塞不塞 DML

    所以借此篇,1来证明optimize table 不阻塞DML 2 表示对好友lmongo的感谢, 有一个能指出你错误,并大胆友善说出来的人,不多,要感谢。

    AustinDatabases
  • “我“该学习什么技术

    技巅
  • Android 学习之路

    从事 Android 开发一周年了,作为一个非科班出身的程序员,一路走来其实挺不容易的。这里我想记录这一路的自学历程,算是对自己一个阶段的总结,也希望能给那些正...

    用户3596197
  • 大牛推荐的6本机器学习经典必读书

    周老师这本书用来当教材确实不错,不过自学的话跟李航老师的《统计学习方法》来比,确实不够详细,但周老师的书广度上要更加广泛。

    一墨编程学习

扫码关注云+社区

领取腾讯云代金券