前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >由Dapper QueryMultiple 返回数据的问题

由Dapper QueryMultiple 返回数据的问题

作者头像
逸鹏
发布2018-04-10 09:35:54
1.6K0
发布2018-04-10 09:35:54
举报
文章被收录于专栏:逸鹏说道逸鹏说道

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

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

这个是官方文档:

Multiple Results

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

Example:

代码语言:javascript
复制
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

直接

代码语言:javascript
复制
if (!multi.IsConsumed)
{
  var articleList = multi.Read();
  var QQModelList = multi.Read();
  var SeoTKDList = multi.Read();
}

一样的效果

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

附录:

代码语言:javascript
复制
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
        }
 
    }
}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 我为Net狂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Multiple Results
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档