2008年3月14日 星期五

LINQ簡介

在.NET Framework 3.5版中,引進一個新的功能,稱之為
LINQ (Language INtegrated Query),能夠利用.NET程式語言進行物件的查詢。.NET的程式語言,像是C# 3.0 (Visual C# 2008)、Visual Basic 9.0 (Visual Basic 2008) 都可利用一個LINQ提供的查詢運算式(Query Expression)語法來整合查詢能力。

LINQ為C#、Visual Basic程式語言提供基本查詢的能力,使用類似SQL查詢的語法,透過from子句指定查詢來源;利用where子句設定篩選條件;透過Order by子句做排序;以Group by子句對資料分組,再利用select子句回傳資料。再者,LINQ查詢也支援複雜的join語法,讓你快快樂樂地在程式語言中,進行複雜的連結運算, 恣意搜尋資料。


LINQ包含以下部份:
  •  LINQ to Object:可查詢集合與陣列中的資料
  •  LINQ to DataSet:查詢DataSet/DataTable中的資料。
  •  LINQ to SQL:查詢或異動微軟SQL Server資料庫的資料。
  •  LINQ to XML:查詢XML節點。

其中對於資料庫存取最重要的就是LINQ to SQL與LINQ to DataSet:

LINQ to SQL
LINQ to SQL,可以利用類似SQL查詢的語法,在執行時期將關連式資料庫的資料庫視為物件,以進行管理及查詢。這個功能真是酷斃了,想像一下你在程式中,下個類 似SQL的直覺式語法,就可以查詢物件的資料、篩選資料、做排序,而且,你的用戶端機器還不需要裝一台SQL Server。

LINQ to SQL內建了物件與關聯式資料兩者之間對應的架構,讓程式設計師能夠建立對應於資料庫結構的.NET物件模型。有了物件模型後,便可透過LINQ語法來查詢、或修改其中的資訊。而建立對應到資料庫物件的物件模型此等雜工,就交由工具去幫你做。

LINQ to DataSet
ADO.NET 提供的DataSet與DataTable具備有將資料暫存在用戶端電腦上的能力。DataSet就如離線的資料庫一般,可以存放一到多個資料表,每個資 料表為一個DataTable物件。DataSet也可以描述資料表與資料表之間的關聯,以及一對一、一對多等特色。雖然DataSet與 DataTable提供一些方法,具備有篩選、搜尋資料的能力,但認真來說,這些功能稍嫌簡陋,缺乏彈性,若想要做一些複雜的查詢,往往不能靠 DataSet、DataTable來達成。

當你利用DataAdapter把資料載入DataSet之後,若需要查詢其中的資料,就可以使用LINQ to DataSet。程式設計師可以針對DataSet來撰寫LINQ查詢。

應用程式的支援
LINQ 可以支援資料繫結 (Data Binding) 功能,不僅在Windows表單程式中可以很方便利用托曳方式進行設定,快速設計出應用程式介面,也可以在ASP.NET 網頁中,利用附加在ASP.NET 3.5版中的LinqDataSource控制項,來設計支援LINQ功能的網頁。未來不管是設計任何一種類型的.NET程式都可以加入LINQ,讓查詢 變得更簡單,讓資料的截取變的更方便。

8 則留言:

智/Chi 提到...

你好
謝謝你的教學
我有問題想問 LINQ TO SQL 是不是一定要用 LINQDataSource?

我明白用 LINQ TO SQL CLASS 可以自動GENERATE TSQL CODE 很放便

如果我只是想 RETRIEVE DATA
可不可以自己CREATE 一個 簡單的LINQDataSource?

謝謝你

智

米米貓學開發 提到...

使用LINQ to SQL不一定要使用LinqDataSource,您也可以直接使用程式碼,建立LINQ查詢,例如:

PubsDataContext db = new PubsDataContext();
IQueryable<publisher> pubList = from p in db.publishers
orderby p.pub_id descending
select p;
foreach (publisher p in pubList) {
Console.WriteLine("{0} - {1}", p.pub_id,p.pub_name);
foreach (title t in p.titles) {
Console.WriteLine(" {0} {1} - {2}", t.title_id,t.title1,t.price);
}
}

智/Chi 提到...

謝謝你 米米貓

不好意思, 想問多一個問題.

文章中 提到
4. 在伺服器總管,Northwind.dbml檔案方案滑鼠右鍵,選取「View Code」,Visual Studio 2008將會建立一個Northwind.cs檔案,其中包含一個NorthwindDataContext部分類別的定義。

我可不可以自己建立這個
NorthwindDataContext();
而不用Northwind.dbml 的?
這樣便可以不行step 3
3. 開啟Server Explorer工具,連接到Northwind資料庫,然後將Region資料表拖曳到LINQ to SQL設計畫面左方的區塊之中。

這樣visual studio 便不用 connect server explorer 了
可以嗎?

因為可以用 connection string 來 connect 個database

唔好意思
我的問題可以有點亂
希望你能明白
謝謝你

米米貓學開發 提到...

我沒有這樣試過!
但是就理論而言 LINQ to SQL只是Visual Studio提供的ORM設計工具,幫你產生物件相關的程式碼,在LINQ的設計中,您也可以不需要依賴工具來產生物件的程式碼,因此,我認為只要程式碼沒有寫錯,應該沒有理由不能這樣做!

智/Chi 提到...

謝謝你
明白了
等我嘗試下先

謝謝

匿名 提到...

請問什麼時候用Linq to SQL
什麼時候用Linq to DataSet呢?

米米貓學開發 提到...

LINQ to SQL:想用物件方式操作DB資料

Linq to DataSet:想查詢DataSet中資料,如進階join查詢時

匿名 提到...

感謝老師!!

總網頁瀏覽量