摘要:為什麼需要LINQ ?
轉自http://www.kangting.tw/2008/01/linq_15.html
為什麼需要LINQ ? 我的一些想法
LINQ 新書工作室還在寫,不過,我一直遇到很多人提到這個問題,「我們為什麼還需要LINQ ? SQL已經夠好了不是嗎」,事實上,在我去年第一次接觸 LINQ 的時候,腦海裏浮現的也是這個問題,資料庫技術發展這麼多年了,沒有人會懷疑 SQL 的威力,直覺、好用,最重要的是,它已經是所有關聯式資料庫的存取標準了,還有,太多人已經熟悉這門技術,究竟為了什麼,我們還需要新的資料存取技術。
我想,是該好好釐清一下這個問題,畢竟,沒有足夠動機,讓技術人員想要學習LINQ,我的書怎麼會賣得好(路人甲:扯東扯西原來為了賣書啊 …)-.-|||。
會讓第一次接觸 LINQ 的技術人員有上面的疑問,最主要的原因在於,幾乎每一個接觸 LINQ 的技術人員被灌輸的第一印象便是,LINQ 是一種可以用來存取物件、資料庫以及XML等等不同資料來源的新技術,這些是事實,但不是重點。
MS發展 LINQ 一定有它的用意。
一個已經成為標準而且被廣泛應用的技術-例如 HTML,就算它不夠好,基本上已經很難被取代,更何況 SQL 本身是一項非常成功的技術,如果 LINQ 只是一個單純的替代品,我想沒有人會想要放棄 SQL 去用它,XML亦是如此,儘管它沒有統一的存取方法,但是各種主流的開發框架,對於XML亦早已提供了完整的支援,我想也沒有人會想要放棄這些已經熟悉的 API 再去學 LINQ,只為了作同樣的事,我這個小小的電腦書作者都知道了,匯集了全球頂尖人才的MS怎麼會不知道 ??
所以,重點不在於LINQ可以存取這些資料來源,LINQ 真正的精神,在於它終於正視了集合物件元素的存取操作這件事。
電腦這門行業之所以稱為資訊工業,在於它是人類為了處理資料而發展出來的一門技術,資料只有經過有效的整理歸納與萃取之後,才能成為有用的資訊,我們所開發的軟體,都是為了處理各種資料而設計,而為了應付資料處理的需求,所以有了資料庫,有了XML文件,然後有了存取這些資料來源的相關的技術。
回到源頭,早期程式語言剛開始發展出來的時候,並沒有上述談到的這些東西,最早期的資料處理,一般均透過所謂的陣列與集合進行操作,一直到現在,只要資料被載入記憶體處理,我們所依賴的依然是這些技術。
瞭解問題在那裏了嗎,集合,長久以來,一直沒有足夠「好」的技術,可以針對儲存在集合中的元素執行存取維護作業,.NET 2.0導入了對泛型的支援,也僅是讓資料的存取更為嚴謹靈活,如此而已,一直到LINQ,這個問題終於有了好的解答。
你很難想像,將集合物件當作資料庫來操作,無論是篩選、計量、關聯或是切割等資料操作,這些 SQL 的基本功能,傳統的程式語言都很難、或是不容易在集合身上辦到,LINQ 為我們提供了一套出色的解決方案。
你可以將 LINQ 視為一套專門用來對付集合物件的資料操作語法,想像有了LINQ,只要將資料儲存於集合,就可以如同資料庫一般進行操作,例如,你可以載入硬碟檔案系統資訊,與資料庫中的資料透過 LINQ 合併作處理,多麼美好的技術,不是嗎。
即然對於集合物件元素的存取有了好的方案,SQL 與 XML 同時一併納入處理最大的好處,是可以在原有的基礎上,提供更好的資料整合能力,而非我們原先認為的,LINQ 的出現只是為了取代這些技術,相反的,它可以讓我們更有效的處理各種不同來源的資料,而當你只是要針對特定的資料來源進行存取,原來的技術還是可以運作的很好。
我想,是該好好釐清一下這個問題,畢竟,沒有足夠動機,讓技術人員想要學習LINQ,我的書怎麼會賣得好(路人甲:扯東扯西原來為了賣書啊 …)-.-|||。
會讓第一次接觸 LINQ 的技術人員有上面的疑問,最主要的原因在於,幾乎每一個接觸 LINQ 的技術人員被灌輸的第一印象便是,LINQ 是一種可以用來存取物件、資料庫以及XML等等不同資料來源的新技術,這些是事實,但不是重點。
MS發展 LINQ 一定有它的用意。
一個已經成為標準而且被廣泛應用的技術-例如 HTML,就算它不夠好,基本上已經很難被取代,更何況 SQL 本身是一項非常成功的技術,如果 LINQ 只是一個單純的替代品,我想沒有人會想要放棄 SQL 去用它,XML亦是如此,儘管它沒有統一的存取方法,但是各種主流的開發框架,對於XML亦早已提供了完整的支援,我想也沒有人會想要放棄這些已經熟悉的 API 再去學 LINQ,只為了作同樣的事,我這個小小的電腦書作者都知道了,匯集了全球頂尖人才的MS怎麼會不知道 ??
所以,重點不在於LINQ可以存取這些資料來源,LINQ 真正的精神,在於它終於正視了集合物件元素的存取操作這件事。
電腦這門行業之所以稱為資訊工業,在於它是人類為了處理資料而發展出來的一門技術,資料只有經過有效的整理歸納與萃取之後,才能成為有用的資訊,我們所開發的軟體,都是為了處理各種資料而設計,而為了應付資料處理的需求,所以有了資料庫,有了XML文件,然後有了存取這些資料來源的相關的技術。
回到源頭,早期程式語言剛開始發展出來的時候,並沒有上述談到的這些東西,最早期的資料處理,一般均透過所謂的陣列與集合進行操作,一直到現在,只要資料被載入記憶體處理,我們所依賴的依然是這些技術。
瞭解問題在那裏了嗎,集合,長久以來,一直沒有足夠「好」的技術,可以針對儲存在集合中的元素執行存取維護作業,.NET 2.0導入了對泛型的支援,也僅是讓資料的存取更為嚴謹靈活,如此而已,一直到LINQ,這個問題終於有了好的解答。
你很難想像,將集合物件當作資料庫來操作,無論是篩選、計量、關聯或是切割等資料操作,這些 SQL 的基本功能,傳統的程式語言都很難、或是不容易在集合身上辦到,LINQ 為我們提供了一套出色的解決方案。
你可以將 LINQ 視為一套專門用來對付集合物件的資料操作語法,想像有了LINQ,只要將資料儲存於集合,就可以如同資料庫一般進行操作,例如,你可以載入硬碟檔案系統資訊,與資料庫中的資料透過 LINQ 合併作處理,多麼美好的技術,不是嗎。
即然對於集合物件元素的存取有了好的方案,SQL 與 XML 同時一併納入處理最大的好處,是可以在原有的基礎上,提供更好的資料整合能力,而非我們原先認為的,LINQ 的出現只是為了取代這些技術,相反的,它可以讓我們更有效的處理各種不同來源的資料,而當你只是要針對特定的資料來源進行存取,原來的技術還是可以運作的很好。
*********************************************************************************
問:
目前在市面上看到新出來的新書,
像 Visual C# 2010、Visual Basic 2010、ASP.NET 4.0.....,雖然都有談到LINQ,但只是當作一個章節在教授,在存取資料時,都還是
SELECT * FROM .....,
INSERT INTO(....) VALUES(....)
連作者都還是依循過去的SQL,並不使用LINQ,這是為什麼呢?
答:
因為 LINQ 本來就不是用來存取資料呀,它跟資料庫沒有關係,它的用途支援前端資料的運算處理。
應用程式處理資料有兩個階段:
第一個階段:將資料從資料庫取出。
第二個階段:針對取出的資料進行處理。
SQL 用在第一個階段,LINQ 則是第二個階段。
所以任何與資料庫有關的互動都必須透過 SQL 來作,包含資料查詢、更新異動等等。
但資料取出來之後要進一步運算,或是與資料庫無關的資料處理,包含集合、陣列的複雜運算就可以交給LINQ 了,所以 你會看到 LINQ沒有所謂的更新之類的語法。