一、LINQ介紹
LINQ,語言級整合查詢(Language INtegrated Query)
經過了最近 20 年,物件導向編程技術(object-oriented (OO) programming technologies)在工業領域的應用已經進入了一個穩定的發展階段。程式員現在都已經認同像 類(classes)、對象(objects)、方法(methods)這樣的語言特性。考察現在和下一代的技術,一個新的編程技術的重大挑戰開始呈現出來,即物件導向技術誕生以來並沒有解決降低訪問和整合資訊資料(accessing and integrating information)的複雜度的問題。其中兩個最主要訪問的資料來源與資料庫(database )和 XML 相關。
LINQ 提供了一條更常規的途徑即給 .Net Framework 添加一些可以應用於所有資訊源(all sources of information )的具有多種用途(general-purpose)的文法查詢特性(query facilities ),這是比向開發語言和運行時(runtime )添加一些關係資料(relational)特性或者類似 XML 屬性(XML-specific)更好的方式。這些文法特性就叫做 .NET Language Integrated Query (LINQ) 。
二、LINQ文法
1. LINQ的讀法:(1)lin k (2)lin q
2. LINQ的關鍵詞:from, select, in, where, group by, order by …
3. LINQ的注意點:必須以select或者是group by 結束。
4. LINQ的語義:
from 臨時變數 in 集合對象或資料庫物件
where 條件運算式
[order by條件]
select 臨時變數中被查詢的值
[group by 條件]
三、C#3.0 LINQ樣本
首先來看一個很簡單的LINQ查詢例子,查詢一個int 數組中小於5的數字,並按照大小順序排列:
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;</p><p>namespace LINQ1<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> int[] arr = new int[] { 8, 5, 89, 3, 56, 4, 1, 58 };<br /> var m = from n in arr where n < 5 orderby n select n;<br /> foreach (var n in m)<br /> {<br /> Console.WriteLine(n);<br /> }<br /> Console.ReadLine();<br /> }<br /> }<br />}<br />
上述代碼除了LINQ查詢文法外,其他都是我們所熟悉的文法,而LINQ查詢文法跟SQL查詢文法很相識,除了先後順序。
再看一個相對複雜的例子:在我們羅列的語言字串中,我們希望按照字元長短,分類羅列出來,實現代碼如下
using System;<br />using System.Collections.Generic;<br />using System.Linq;<br />using System.Text;</p><p>namespace LINQ1<br />{<br /> class Program<br /> {<br /> static void Main(string[] args)<br /> {<br /> string[] languages = { "Java", "C#", "C++", "Delphi", "VB.net", "VC.net", "C++ Builder", "Kylix", "Perl", "Python" };<br /> var query = from item in languages<br /> orderby item<br /> group item by item.Length into lengthGroups<br /> orderby lengthGroups.Key descending<br /> select lengthGroups;<br /> foreach (var item in query)<br /> {<br /> Console.WriteLine("strings of length ", item.Key);<br /> foreach (var val in item)<br /> {<br /> Console.WriteLine(val);<br /> }<br /> }<br /> Console.ReadLine();<br /> }<br /> }<br />}<br />
參考資料
1、C#3.0 LINQ 查詢文法 :http://blog.joycode.com/ghj/archive/2007/06/07/103960.aspx
2、LINQ專題:http://tech.it168.com/zt/linq/index.html
3、XML和LINQ實戰詳解:http://www.maeee.cn/article/it/linq/show/2008122211350135.shtml