iT邦幫忙

DAY 20
2

從零開始開發Web應用程式系列 第 20

Web應用程式開發-Linq

  • 分享至 

  • xImage
  •  

ASP.NET2008版本開始推出了LINQ的 資料查詢架構
根據MSDN的解釋:Language-Integrated Query (LINQ) 是 Visual Studio 2008 和 .NET Framework 3.5 版中的突破性創舉,它填補了物件與資料之間的差距,...SQL Server 資料庫、XML 文件、ADO.NET Dataset,以及任何由支援 IEnumerable 或泛型 IEnumerable(Of T) 介面的物件組成的集合。

簡單的就是說,以往查詢檔案相關的部分,要用Systm.IO,查詢資料庫要用System.Data.SqlClient,查詢XML要用System.Xml,操作DataSet要用System.Data,甚至只要是泛型集合物件,IEnumerable和<List of T>就可支援LINQ語法,他的應用相當廣泛,功能也十分強大,當然對於許多工程人員來說會認為是一種額外的負擔,因為又要多學一個技術,要多花很多心思和時間,然而使用後覺得他仍然是有必要學習的,對整個系統架構來說,程式碼更簡潔、更有架構性、也統一化、充分將系統以物件導向的設計方式實現、對於各種集合物件只要學習一種查詢語法,也就是說剛開始會有學習和投入成本,但對往後是可以有數倍的效益的.

另外一點要說明的是,LINQ下一代查詢架構,Entity Framework也出來了,當然他還是基於LINQ的基礎做變化,重點是資訊技術沒有人可以學盡,即使每天只睡一小時,還是學不完,但是也不能以此當藉口來合理化自我的安逸,產業是競爭的、資訊技術是不會停下腳步的,還是要去多少都要學習,因為中間只要斷了一個時段,其實也就無法在接續了,也就是某個趨勢啟動的時候,開始投機設想希望他不要持續下去,但是若賭錯了,要趕上幾乎就很難了,這是一種心態,而不是辯論,就像常常有新手問,既然資訊技術學不完,那為什麼還要學,這的確是個很難回答的問題,雖然沒有標準答案,但也不是沒答案,這可分為兩方面來說:
1.以職場競爭來說,當競爭對手和其他人都會了,你若不會,你要如何去競爭..
2.既然資訊技術學不完,那為什麼還要學? 那就如同,今天吃完晚餐,明天還是要吃,既然明天還是要吃,那你今天為什麼還要吃晚餐? 而且後天晚上也是要吃晚餐,所以為什麼你明天晚上要吃晚餐?

回歸正題,LINQ的語法,其實和SQL有點像,是反過來的
SQL會這樣下 select columns from table where column = xxx;
而LINQ是 from columns in table where columns.column = xxx select columns;
他的方式是 從table這個集合中 找出要的標的, 針對標的下篩選條件,最後把要的資料回傳.

以存取資料庫來說,省卻了以往要先建立ADO.NET和自己先打底做ORM的動作,也實現了以操作物件去代替操做資料庫,簡單的範例如下
DataClasses1DataContext db = new DataClasses1DataContext();
IEnumerable<Table2> datas = from t2 in db.Table2 where t2.PaperID.Equals(paperId) select t2;
List<Table2> list = datas.ToList();

簡短說明如下
DataClasses1DataContext db = new DataClasses1DataContext();是建立linq to sql的DataContext

IEnumerable<Table2> datas = from t2 in db.Table2 where t2.PaperID.Equals(paperId) select t2;
從DataContext的實體中,去找出標地t2,當t2.PaperID的條件和paperId這個變數的值相同時,在這樣的條件都符合後,將標地t2回傳,回傳的是列舉值,泛型集合的列舉值,為多筆資料的集合,其泛型的自訂型別即為Table2.

List<Table2> list = datas.ToList();
將其轉為實質的強型別物件清單,這就如同以往的操做了.List是.NET2.0即有的類別.

也就是說這短短的三行程式碼,其中變化萬千,範例只能算是基本中的基本,但卻替代了以往需要至少三十行以上甚至三百行的程式碼所能做的事情,但也無須以為他就是如此的簡單,往往有個錯誤的觀念,就是程式碼越龐大才能顯示出一個設計人員的功力,那是錯誤的,往往看到兩個不同的人寫相同的功能,一個化了三百多行去完成一個功能, 另一個完成一樣的功能卻只有三十幾行程式碼,簡短輕薄就像iPhone一樣,誰會去用二十年前的大哥大,還要用手提才能帶著跑,更別談還能觸控、上網、收信...


上一篇
Web應用程式開發-ADO.NET
下一篇
Web應用程式開發-資料庫
系列文
從零開始開發Web應用程式30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0

我要留言

立即登入留言