新聞中心
本文向大家介紹Linq To Sql缺點,可能好多人還不了解Linq To Sql缺點,沒有關(guān)系,看完本文你肯定有不少收獲,希望本文能教會你更多東西。

創(chuàng)新互聯(lián)專注于叢臺網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供叢臺營銷型網(wǎng)站建設(shè),叢臺網(wǎng)站制作、叢臺網(wǎng)頁設(shè)計、叢臺網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造叢臺網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供叢臺網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
Linq To Sql是Microsoft開發(fā)的針對解決data!=object問題的新技術(shù)。在筆者的一系列的文章中,對它已經(jīng)做了大量的介紹?,F(xiàn)在,筆者將從經(jīng)驗的角度,談?wù)凩inq To Sql缺點.
Linq To Sql缺點
很久前,有個網(wǎng)友問到這么一個問題。 他在界面上,有個DataView,里面綁定了一些Column,然后,他勾選那一列,就按某列排序。其傳回的參數(shù)是列的名字。然后問我,該怎么用Dlinq 來實現(xiàn)。
在以前拼接Sql語句的年代,這個很簡單,一個" order by " + string,想按什么排就按什么來排。而現(xiàn)在,dlinq是用是一個對象的屬性,已經(jī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.說不定,可以找到更方便的。后來我才在這個例子中,看到更方便的。
- var query =db.Customers.Where
("City == @0 and Orders.Count>= @1", "London", 10).- OrderBy("CompanyName").
- Select("New(CompanyName as Name, Phone)");
在這里OrderBy直接接收的就是列的名字。再仔細一看,好像Where里是Linq的語句哎,那OrderBy也該是linq語句。后來,我把CompanyName換成小寫的,一跑過了。莫非真的是列的名字?出個難題吧。找了一個列名,是帶空格的,重新來建這個工程.一跑,錯了!把列名用中國擴號擴起來了,也是錯了???,只是動態(tài)構(gòu)造Expression Tree而已,永遠都不能直接接收列的名字。這個例子看著是很簡單,可不知道你有沒有注意到它有一個80多k的Dynamic.cs文件。更有意思的事情是,它的名稱空間是System.Linq.Dynamic.看樣子,ms本來是打算把它加在.net 3.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的查詢吧.
網(wǎng)頁標題:LinqToSql缺點的認識和解決
當前鏈接:http://www.5511xx.com/article/cojeesc.html


咨詢
建站咨詢
