溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linq To Sql缺點是什么

發(fā)布時間:2021-12-02 09:22:38 來源:億速云 閱讀:94 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“Linq To Sql缺點是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“Linq To Sql缺點是什么”吧!

Linq To Sql缺點

很久前,有個網(wǎng)友問到這么一個問題。 他在界面上,有個DataView,里面綁定了一些Column,然后,他勾選那一列,就按某列排序。其傳回的參數(shù)是列的名字。然后問我,該怎么用Dlinq 來實現(xiàn)。

在以前拼接Sql語句的年代,這個很簡單,一個" order by " + string,想按什么排就按什么來排。而現(xiàn)在,dlinq是用是一個對象的屬性,已經(jīng)不可能拼接了。我當(dāng)時給他的答案是這樣的。

private void Methods(string orderId)  {  var q = db.Customers.Select(c=>c);  switch(orderId)  {  case "ID":  qq = q.OrderBy(c=>c.ID);  break;  case "Name":  qq = q.OrderBy(c=>c.Name);  break;  default:  break;  }  var result = q.ToList();  }

我那時也沒有想出一個更好的方案來。而后告訴他,去查下Compiled Query.說不定,可以找到更方便的。后來我才在這個例子中,看到更方便的。

  1. var query =db.Customers.Where
    ("City == @0 and Orders.Count>= @1", "London", 10).  

  2. OrderBy("CompanyName").  

  3. Select("New(CompanyName as Name, Phone)");  

在這里OrderBy直接接收的就是列的名字。再仔細(xì)一看,好像Where里是Linq的語句哎,那OrderBy也該是linq語句。后來,我把CompanyName換成小寫的,一跑過了。莫非真的是列的名字?出個難題吧。找了一個列名,是帶空格的,重新來建這個工程.一跑,錯了!把列名用中國擴號擴起來了,也是錯了。咳,只是動態(tài)構(gòu)造Expression Tree而已,永遠都不能直接接收列的名字。這個例子看著是很簡單,可不知道你有沒有注意到它有一個80多k的Dynamic.cs文件。更有意思的事情是,它的名稱空間是System.Linq.Dynamic.看樣子,ms本來是打算把它加在.net?。?5中嗎.不曉得為什么放到了例子中了。這個名稱空間下,其主要內(nèi)容就是動態(tài)構(gòu)造Expression Tree. 和Linq To Sql進階系列(六)用object的動態(tài)查詢篇 一文中的方法類似。只是,它還包含了解析字符串部分.

從上面那個例子中,可以看出,Linq To Sql在這種動態(tài)構(gòu)造語句時,比拼接sql麻煩很多。在Linq To Sql進階系列(六)用object的動態(tài)查詢篇 一文中,筆者極力推薦使用object的查詢。這符合Linq To Sql的設(shè)計原則。因為,它主要是為了解決data!=objects 的問題而產(chǎn)生的.它所有的操作均針對object,那就讓我們使用object的查詢吧.

到此,相信大家對“Linq To Sql缺點是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI