转载LINQ优点 自己学习用的
這幾天在讀一本LINQ方面的書《Essential LINQ》,在這里和大家分享下。
由于對LINQ的深入總結(jié)需要大量的篇幅,因此在這里分成幾個(gè)部分來講。
(*我看《Essential LINQ》是英文版的,有些名詞不能翻譯成正統(tǒng)的中文解釋請給予諒解)
?
LINQ的優(yōu)點(diǎn):
??
LINQ基本有以下七個(gè)優(yōu)點(diǎn),讓我來一一舉例說明:
1.Integrated:所謂的Integrated(集成化),LINQ是從以下方面體現(xiàn)集成的:
(1):把查詢語法融入了C#(VB)這些語言中,讓他變成了一種語法。這樣就能和C#中的其他語法一樣支持:
語句高亮顯示,類型檢查,允許使用debugger調(diào)試
(2):把以前復(fù)雜的查詢前的工作都集成封裝起來,讓開發(fā)人員側(cè)重于查詢。
(3):集成后的語法更加的清晰易懂,可讀性較高。
??
比較:?
//原來的格式SqlConnection sqlConn = new SqlConnection(connectionString);sqlConn.Open();SqlCommand command = new SqlCommand();command.Connection = sqlConn;command.CommandText = "Select * From Customer";SqlDataReader dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);//LINQ的格式NORTHWNDDataContext dc = new NORTHWNDDataContext();var query = from c in dc.Customersselect c;
2.Unitive:所謂Unitive(統(tǒng)一化)就指不管對任何類型外部和內(nèi)部數(shù)據(jù)源(對象集合,xlm,數(shù)據(jù)庫數(shù)據(jù))都使用統(tǒng)一的查詢語法。
使用統(tǒng)一化查詢語言的好處在于以下幾點(diǎn):
- 你不用因?yàn)橐褂貌惶煜さ臄?shù)據(jù)源而花很多精力去了解它,你可以快速簡單的使用LINQ語法對起查詢。
- 由于使用了統(tǒng)一的語法,可以使代碼維護(hù)變的更加簡單。
以下代碼體現(xiàn)了LINQ的統(tǒng)一化:
//數(shù)據(jù)源:對象集合
var query = from c in GetCustomers()select c;//數(shù)據(jù)源:SQL
var query1 = from c in dc.Customersselect c;
//數(shù)據(jù)源:XML
var query2 = from c in customers.Descendants("Customer")select c;
3.Extensible:所謂Extensible(可擴(kuò)展)指以下2個(gè)方面:
(1).可查詢數(shù)據(jù)源的擴(kuò)展。 LINQ提供了個(gè)LINQ provider model,你可以為LINQ創(chuàng)建或提供provider讓LINQ支持更多的數(shù)據(jù)源。
(2).可擴(kuò)展查詢方法。開發(fā)者可以根據(jù)自己的需求為LINQ重寫和擴(kuò)展查詢方法。
以下是些第三方的LINQ provider:
LINQ Extender, LINQ to JavaScript, LINQ to JSON, LINQ to MySQL, LINQ to Flickr, LINQ to Google
?
4.Declarative:所謂Declarative(聲明式),簡單的來說指的是開發(fā)人員只要告訴程序做什么,程序自己判斷怎么做。
Declarative programming(聲明式編程)的優(yōu)點(diǎn)體現(xiàn)在以下2點(diǎn):
(1).提高了開發(fā)速度。因?yàn)殚_發(fā)者不用書寫大量的代碼來具體化執(zhí)行步驟,只許告訴程序做什么。
(2).提高代碼優(yōu)化空間。因?yàn)殚_發(fā)者不用參與干涉對程序執(zhí)行的具體步驟,這樣就提供給編譯器更多的空間去優(yōu)化代碼。
舉例SQL來說,LINQ生成的SQL語句往往比一對SQL水平一般的開發(fā)者能寫出更好的SQL語句。
比較Declarative programming 與 Imperative programming:
//聲明式編程
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query = from list in listsfrom num in listwhere num % 3 == 0orderby num descendingselect num;//命令式編程
List<int> list1 = new List<int>();
list1.Add(1);
list1.Add(2);
list1.Add(3);
List<int> list2 = new List<int>();
list2.Add(4);
list2.Add(5);
List<List<int>> lists1 = new List<List<int>>();
lists1.Add(list1);
lists1.Add(list2);List<int> newList = new List<int>();
foreach (var item in lists1)foreach (var num in item)if (num % 3 == 0)newList.Add(num);
newList.Reverse();
5.Hierarchical:所謂Hierarchical(層次化)指使用面向?qū)ο蟮姆绞匠橄髷?shù)據(jù)。
SQL是關(guān)系型數(shù)據(jù)庫,它以關(guān)系的方式描述數(shù)據(jù)以數(shù)據(jù)的聯(lián)系,但我們的程序設(shè)計(jì)成面向?qū)ο蟮囊虼宋覀冊诔绦蚶锏玫降臄?shù)據(jù)庫數(shù)據(jù)往往都是
rectangular grid(平面的顯示數(shù)據(jù))。但是LINQ通過所謂的O-R Mapping方式,把關(guān)系型轉(zhuǎn)換成對象與對象方式描述數(shù)據(jù)。
這樣帶來的好處是:開發(fā)者能直接以對象的方式去操作數(shù)據(jù),對習(xí)慣面向?qū)ο蟮拈_發(fā)者來說面向?qū)ο竽P透桌斫?/span>。
?
6.Composable:所謂Composable(可組成)指LINQ可以把一個(gè)復(fù)雜的查詢拆分成多個(gè)簡單查詢。
LINQ返回的結(jié)果都是基于接口:IEnumerable<T>,因此能對查詢結(jié)果繼續(xù)查詢,而且LINQ具有延遲執(zhí)行的特性因此拆分執(zhí)行不會影響效率。
優(yōu)點(diǎn)在于:
(1).方便調(diào)試。把復(fù)雜的查詢拆分成簡單的查詢,然后逐個(gè)調(diào)試。
(2).便于代碼維護(hù)。把代碼拆分后能使代碼變的更易理解。
以下代碼體現(xiàn)了可組成性:
//以下代碼體現(xiàn)了Composable
List<List<int>> lists = new List<List<int>> { new List<int> { 1, 2, 3 }, new List<int> { 4, 5 } };
var query1 = from list in listsfrom num in listselect num;var query2 = from num in query1where num % 3 == 0select num;var query3 = from num in query2orderby num descendingselect num;
?
7.Transformative:所謂Transformative(可轉(zhuǎn)換)指的是LINQ能把一種數(shù)據(jù)源的內(nèi)容轉(zhuǎn)換到其他數(shù)據(jù)源。
方便用戶做數(shù)據(jù)移植。
以下代碼體現(xiàn)了轉(zhuǎn)換的特性:
//把關(guān)系型數(shù)據(jù)轉(zhuǎn)換成XML型
var query = new XElement("Orders",from c in dc.Customerswhere c.City == "Paris"select new XElement("Order",new XAttribute("Address", c.Address)));
以上就是LINQ的幾大優(yōu)點(diǎn),很高興能在這里和大家分享。有任何不足之處請給予補(bǔ)充和糾正,謝謝光臨小舍。
//2011/1/28 補(bǔ)充(LINQ TO SQL)
在LINQ TO SQL 方面,如果使用LINQ TO SQL可以有效的防止SQL注入,LINQ TO SQL 會把注入的代碼當(dāng)做無用的參數(shù)處理。
轉(zhuǎn)載于:https://www.cnblogs.com/cq524919195/archive/2012/04/15/2449000.html
總結(jié)
以上是生活随笔為你收集整理的转载LINQ优点 自己学习用的的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用Asp.net实现简单的文字水印
- 下一篇: 求爱我别走歌词!