LINQ統一了數據訪問方式,它是程序語言與數據之間的橋梁。LINQ框架如圖所示:它主要由三部分組成:語言擴展、LINQ構建塊和提供程序集。
對於如下代碼:
varquery = from book in SampleData.Books
where book.Title == "Funny Stories"
orderby book.Title
select new {book.Title, book.Price};
它等價於:
varquery = SampleData.Books
.Where(book => book.Title == "Funny Stories")
.OrderBy(book => book.Title)
.Select(book => new {book.Title, book.Price});
編譯器會將其轉換為如下的調用:
IEnumerable<double> query = Enumerable.Select<int,double>(
Enumerable.OrderBy(\
Enumerable.Where(
SampleData.Books,
book => book.Title == "Funny Stories"),
book => book.Title),
book => new {book.Title, book.Price});
LINQ很多方法定義在System.Linq.Enumerable類中,這些方法都被實現為擴展方法。
.NET中實現了IEnumerable<T>接口的對象成為可迭代對象,可迭代對象會返回一個迭代器(實現了IEnumerator<T>接口的對象),通過迭代器就可以對可迭代對象進行遍歷。
Enumerable類中的一些擴展方法接受IEnumerable<T>類型的參數並返回IEnumerable<T>的結果,因此在處理過程相當於過濾器的作用。這些方法只返回可迭代對象,並不返回查詢的結果,只有對可迭代對象進行調用時(例如foreach)查詢操作才會執行,這是LINQ很重要的一個特性——延遲查詢。