前 言
最近和我們老大一起做技術面試(我是旁聽的),發現前來面試的沒幾個掌握甚至是丁點了解LINQ。這讓我很納悶,LINQ伴隨2008一起發布至今難道大家真的沒時間去了解一下或者學習一下這個應用基礎嗎。甚至問及有些人LINQ是什么,答題者想都不想 LINQ TO SQL, 崩潰!沒錯,LINQ是可以TO SQL,但是除了SQL,LINQ就無所作為了?非也。因此在這里和大家一起分享學習LINQ。本文適合以下讀者, 如果你是不符合者請賞臉捧個場,3Q
從未觸碰過LINQ的 對LINQ有過了解但是從未實戰過的 打算學習LINQ的簡 介
LINQ 是什么?引用官方術語“語言集成查詢 (LINQ) 是 Visual Studio 2008 和 .NET work 3.5 版中引入的一項創新功能,它在對象領域和數據領域之間架起了一座橋梁?!?那么LINQ給我們帶來了什么,請看以下例子:
問:有序列A=int[]{1,2,3,4,5,6,7,8,0}; B=int[]{2,4,7,8,9}。請求出包含A和B共同值的序列C。
如果按照原來的思路,那么編碼也許如下:
說明:
List<int> c = new List<int>();foreach(int a in A){ foreach(int b in b) { if (a==b) { c.add(a); } }}
說明:
是不是覺得上面這段雖然沒什么問題,但是很丑陋。如果我們引用LINQ來編寫呢:
IEnumerable<int> C = from a in A from b in B where a==b select a;
語 法
1. LINQ所處在的主要命名空間:System.Linq
2. LINQ的處理的核心對象就是IEnumerable可枚舉對象也包括了泛型枚舉,換句話說當你要處理的對象為IEnumerable類型對象時即可使用LINQ操作它。且在沒有經過其他處理的情況下將返回一個新的IEnumerable序列,注意LINQ有一個特性“延遲加載”這個將在后續說明。
3. 關鍵字(摘自MSDN):
from : 指定數據源和范圍變量(類似于迭代變量)。
where: 根據一個或多個由邏輯“與”和邏輯“或”運算符(&& 或 ||)分隔的布爾表達式篩選源元素。
select: 指定當執行查詢時返回的序列中的元素將具有的類型和形式。
group: 按照指定的鍵值對查詢結果進行分組。
into: 提供一個標識符,它可以充當對 join、group 或 select 子句的結果的引用。
orderby: 基于元素類型的默認比較器按升序或降序對查詢結果進行排序。
join: 基于兩個指定匹配條件之間的相等比較來聯接兩個數據源。
let: 引入一個用于存儲查詢表達式中的子表達式結果的范圍變量。
in: join 子句中的上下文關鍵字。
on: join 子句中的上下文關鍵字。
equals: join 子句中的上下文關鍵字。
by: group 子句中的上下文關鍵字。
ascending:orderby 子句中的上下文關鍵字。
descending:orderby 子句中的上下文關鍵字。
4. 語法說明,每個LINQ語句都以from作為開頭,以select作為結束,這點和T-SQL語法不通的切記先入為主的思考。其他關鍵字如where則類似T-SQL作為篩選判斷條件。
新聞熱點
疑難解答