語(yǔ)言集成查詢(xún)(Language-Integrated Query),簡(jiǎn)稱(chēng)LINQ,.NET中的LINQ體系如下圖所示:


 

在編程語(yǔ)言層次,LINQ對(duì)于不同的數(shù)據(jù)源提供了相同的查詢(xún)語(yǔ)法,方便了程序員操作不同的數(shù)據(jù)源。

可查詢(xún)類(lèi)型

LINQ之所以能夠使用相同的語(yǔ)法操作不同的數(shù)據(jù)源,是因?yàn)楹蚅INQ直接打交道的是可查詢(xún)類(lèi)型而非數(shù)據(jù)源,在LINQ中,直接或間接實(shí)現(xiàn)了IEnumerable<T>接口的類(lèi)型稱(chēng)為可查詢(xún)類(lèi)型, .NET中如:List<T>Dictionary<TKey,TValue>,數(shù)組(由CLR負(fù)責(zé)隱式實(shí)現(xiàn)IEnumerable<T>接口)等,實(shí)現(xiàn)了IEnumerable<T>接口。
IQueryable<out T>繼承自IEnumerable<T>,是個(gè)標(biāo)記接口。

可查詢(xún)類(lèi)型無(wú)需額外操作即可進(jìn)行LINQ操作,若數(shù)據(jù)源在內(nèi)存中不以可查詢(xún)類(lèi)型的形式存在,那么LINQ提供程序必須要先將數(shù)據(jù)源轉(zhuǎn)換為可查詢(xún)類(lèi)型,如LINQ to XML將XML文件轉(zhuǎn)換為可查詢(xún)的XElement類(lèi)型:
 XElement contacts = XElement.Load(@"c:\myContactList.xml"<