1、LINQ是什麼?
LINQ是Language Integrated Query的縮寫,即“語言集成查詢”的意思。LINQ的提出就是為了提供一種跨越各種數據源的統一的查詢方式,它主要包含4個組件--Linq to Objects、Linq to XML、Linq to DataSet和Linq to SQL。
下面簡單的介紹一下LINQ的4個組件。
Linq to SQL組件:它可以查詢基於關系數據庫的數據。其中,微軟只實現了對SQL Server數據庫的查詢,包括對其中數據進行查詢、修改和刪除等操作。
Linq to DataSet組件:它可以查詢DataSet對象中的數據,並能對數據進行增刪改查等操作。
Linq to XML組件:該組件可以查詢XML文件,在它被提出來之前,C#中使用XPath來對XML進行查詢,但該工具沒有Linq to XML來得簡潔。
Linq to Object組件:這個組件可以查詢集合數據,如數組或List等。
2、LINQ好在哪裡?
好的地方:LINQ使對數據源的操作變得更加簡單、方便和易於理解。
2.1 查詢表達式
在說明LINQ的好處之前,需要先了解“查詢表達式”。查詢表達式必須以from子句開頭,並且必須以select或group子句結尾,在第一個from子句和最後一個select或group子句之間,可以包含一個或多個where子句、orderby、join子句。其形式非常類似於SQL語言,只是書寫倒了過來。
//查詢表達式 var queryExp= from s in collection
select s;
//查詢表達式還有另外一種表達方式,即“點標記方式”,var queryExp=collection.Select(s=>s);
至於選擇什麼方式,就看程序員個人的習慣了。
2.2 使用Linq to Objects查詢集合
在LINQ提出之前,一般使用for和foreach查詢集合,但這種方式沒有LINQ to Objects來得簡潔,且不容易添加篩選條件。
//創建查詢表達式來獲得集合中為偶數的元素 var queryResults= from item in collection where item%2 ==0 select item;
從以上代碼可以看出,使用Linq to Objects來查詢集合對象,代碼更加簡潔了。而且LINQ還方便添加篩選條件,只需要在where子句中添加即可。
2.3 使用Linq to XML 查詢XML文件
//創建查詢,獲取名字為“李四”的元素 var queryResults=from element in xmlDoc.Elements("Person") where element.Element("Name").Value=="李四" select element;
從以上代碼可以看出,使用Linq to XML查詢XML文件,代碼明顯簡潔了很多,只需要一個查詢表達式即可。
Linq to DataSet的例子這裡就不寫了,它的使用方式類似於Linq to Object,只是Linq to DataSet查詢的不是集合對象而是DataSet對象。
3、理解LINQ的本質
其實在C# 3.0中並沒有添加任何新特性,因為對於編譯器而言,C# 3.0新特性的代碼和以前的代碼一樣,這對於LINQ也是不例外的。大家可以從IL代碼中得出,LINQ表達式是建立在Lambda表達式和擴展方法的基礎上的,而Lambda表達式又是建立在委托的基礎上的,擴展方法也是屬於方法,所以,LINQ的本質還是對方法的調用。