由Dapper QueryMultiple 返回資料的問題得出==》Dapper QueryMultiple並不會幫我們識別多個傳回值的順序

來源:互聯網
上載者:User

標籤:

今天幫群友整理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                    }                }            }

  

 

由Dapper QueryMultiple 返回資料的問題得出==》Dapper QueryMultiple並不會幫我們識別多個傳回值的順序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.