由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper

今天帮群友整理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 = @id
select * from Orders where CustomerId = @id
select * 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
                    }

                }
            }

  

时间: 2024-11-05 17:13:19

由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序的相关文章

传递和返回数据到一个Delphi编写的UDF

数据 [UDF系列之四]:传递和返回数据到一个Delphi编写的UDFWarton译作者: Chris Levesque, Tina Grubbe, Brett Bandy -------------------------------------------------------------------------------- [译者叙]: 前面我已经翻译了几篇关于编写UDF的文章,虽然一些朋友可能也从中得到了一点帮助,但是可能对UDF的认识还存在一些问题.今天,我再翻译两文章,这两篇文章

在C#中用最简洁有效的代码执行存储过程并返回数据

存储过程|数据|执行 存储过程 p_sys_Login 定义如下: CREATE PROCEDURE p_sys_Login @argUserID varchar(20), --用户名 @argPassword varchar(20), --密码 @argResult varchar(50) OUTPUT --登录结果 AS /* ... ... */ 下面演示如何在C#中用最简洁有效的代码执行该存储过程并返回数据: /// <summary> /// 用户登录验证 /// </summ

php类:返回数据格式化类

DataReturn.class.php <?php /** 返回数据格式化类 * Date: 2011-08-15 * Author: fdipzone */ class DataReturn{ // class start private $type; private $xmlroot; private $callback; private $returnData; public function __construct($param=array()){ $this->type = $th

Java多线程初学者指南(8):从线程返回数据的两种方法

从线程中返回数据和向线程传递数据类似.也可以通过类成员以及回调函数来返回数据.但类成员在返回数据和传递数据时有一些区别,下面让我们来看看它们区别在哪. 一.通过类变量和方法返回数据 使用这种方法返回数据需要在调用start方法后才能通过类变量或方法得到数据.让我们先来看看例程2-13会得到什么结果. package mythread; public class MyThread extends Thread { private String value1; private String valu

php实现的返回数据格式化类实例

 DataReturn.class.php类文件如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

ios-iOS 数据获取 后台返回数据太慢怎么办

问题描述 iOS 数据获取 后台返回数据太慢怎么办 ·我有个功能:手机定位获取当前的坐标 发给后台 经过后台根据坐标经过计算一次返回当前坐标附近的所有员工信息并展示,让后从员工信息里获取 员工坐标传到地图界面并展示.因为后台反应慢,网速不行,app请求后的逻辑判断太复杂,数据太大,所以返回很慢. 在不更新设备的前提下 如何变得更快?? 我的想法是 不要一下子返回所有员工 5个 5个的返回,有一个单独的参数来获取附近员工所有的坐标.(这样虽然返回的数据少了但是后台的计算更复杂了不知到会不会变快)

android-js如何主动访问Android和ios方法,并返回数据

问题描述 js如何主动访问Android和ios方法,并返回数据 您好,我是做webapp的开发的,最近遇到一个问题,就是js如何主动调用Android的方法并返回参数,想请问大神您知道怎么处理吗? 解决方案 下面是我写的一些示例: MGSD.Static.IOS = "iOS"; MGSD.Static.ANDROID = "android"; MGSD.exchange = function(value, funcname){ if(!MGSD.OS){//第一

javascript-ajax请求返回数据保存为全局变量

问题描述 ajax请求返回数据保存为全局变量 我发送ajax请求,想要将返回值保存到全局变量(因为其他js需要用到)我在function前面声明了全局变量,在ajax中赋值,但是在其他js中调用该返回值,显示undifined 解决方案 我之前也遇到这个问题.按照网上说的做,结果是undefined:最后没办法,把需要赋值的参数封装为一个函数,在ajax中调用. 解决方案二: 问题你点击bind的时候执行过uuu的click进行赋值了没有,是否正常进入success回调赋值,不正常赋值当然是un

AFN返回数据值为空,简单问题高悬赏

问题描述 AFN返回数据值为空,简单问题高悬赏 我发现 block里面的数据都是有的,也能打印出来,但是 返回的数据为空 我也知道是异步的问题 自己可以用block接收 但是目前急用 直接需要具体操作 因急用 100块求解决 QQ:396008684 解决方案 这是因为你return toke的时候,异步函数还没有返回,所以toke还没有 执行 toke=dicc[@"token"] 你可以在你的函数中增加一个参数,用block等,这样当异步返回的时候,调用block参数来把数据传递出