基礎概念express
LINQ是微軟推出的一項具備突破性的新特性——語言集成查詢(Language Integrate Query),他在對象和數據間創建了一種對應關係,可使用訪問內存對象的方式查詢數據集合數組
在.NET類庫中,LINQ相關類庫都在System.Linq命名空間下,對於目前程序須要用到的是LINQ to Object,數據源爲實現了接口IEumerable<T>或IQueryable<T>的內存數據集合,對於本程序也就是List<T>集合函數
LINQ查詢的目的是從制定的數據源中查詢知足符合特定條件的數據元素,而且根據須要對這些查詢的元素進行排序、鏈接等操做,因此LINQ查詢主要包括以下幾個元素學習
數據源:表示LINQ將從哪裏查找數據,一般是一個或多個數據集,數據集包含一系列元素,是一個類型爲IEumerable<T>或IQueryable<T>的對象,能夠對它進行枚舉,遍歷每個元素,元素能夠是任意數據類型spa
目標數據:數據源中的數據並不都是查詢所須要的結果,目標數據用來指定具體想要什麼數據,在LINQ中,它定義了查詢結果數據集中元素的具體類型對象
篩選條件:篩選條件定義了對數據源中元素的過濾條件,只有知足條件的原素材做爲查詢結果返回,帥選條件能夠是簡單的邏輯表達式表示,也能夠用具備複雜邏輯的函數來表示排序
附加操做:表示一些其餘的操做,好比排序、計算查詢結果的最值和求和、對查詢結果進行分組等接口
數據源和目標數據是必備元素,篩選和附加操做是可選元素ip
查詢表達式內存
查詢表達式是LINQ查詢的基礎,也是最經常使用的編寫LINQ查詢的方法。有查詢關鍵字和對應的操做數組成的表達式總體
查詢表達關鍵字
關鍵字 |
功能 |
from |
指定要查找的數據源及範圍變量,多個from字句則表示從多個數據源查找數據 |
select |
指定查詢要返回的目標數據,能夠指定任何類型,甚至是匿名類型 |
where |
指定元素的篩選條件,多個where子句則表示並列條件,必須所有都知足才能入選 |
orderby |
指定元素的排序字段和排序方式,當有多個排序字段時,由字段順序肯定主次關係,能夠指定升序和降序兩種排序方式 |
group |
指定元素的分組字段 |
join |
指定多個數據源的關聯方式 |
from
每一個LINQ查詢都是從from子句開始,其通常包括如下兩個功能
制定查詢將採用數據源
定義一個本地變量,表示數據源中單個元素
格式爲from localVar in dataSource,通常不爲localVar元素指定數據類型,由編譯器自動分配類型
select
LINQ查詢表達式必須以select或者group子句結束,格式以下
select element
element參數指定查詢結果中元素的類型及初始化方式
要選擇的目標數據不只能夠爲數據源中的元素,還能夠是該元素的不一樣操做結果,包括屬性、方法和運算等
可使用匿名類型,進一步學習
where
格式以下
where expression
expression爲一個邏輯表達式,可使用&&和||指定多個條件之間的邏輯運算關係
orderby
格式以下
orderby element [sortType]
默認是ascending
能夠同時指定多個排序元素,也可爲每一個排序元素制定獨立的排序方式
group
實現對查詢結果的分組操做,經常使用格式以下
group element by key
key表示分組條件,group子句返回類型爲IGrouping< Tkey,TElement>的查詢結果,能夠看做一個內部嵌套List列表的Hashtable,
若是須要對分組的結果進行排序,再次查詢等操做,須要使用into關鍵字將Group的查詢結果保存到一個臨時變量,其格式爲
group element by key into tmpGrp
join
經過join子句聯接操做,能夠未來自不一樣源序列,而且在對象模型中沒有直接聯繫的元素相關聯,惟一的要求是每一個源中須要共享某個能夠進行比較,以判斷是否相等的值
能夠實現三種聯接:內部聯接、分組聯接、左右聯接
內部聯接
格式以下
join element in dataSource on exp1 equals exp2
exp1和exp2表示兩個表達式,它們具備相同的數據類型
分組聯接
join element in dataSource on exp1 equals exp2 into grpName
into表示將這些數據分組並保存到grpName中
左外部聯接
LINQ查詢方法
IEumerable<T>接口
主要方法有
數值運算:Sum,Average,Max,Min
元素數量Count,LongCount
取值:First,Last,ElementAt
提取子集:Skip,SkipWhile,Take,TakeWhile
集合操做:ReverseAll,Concat,Except,Intersect,Union,Distinct,SequenceEqual
其餘:Any,Contains,ToArray,ToList…
Lambda表達式
基本格式
(input parameters)=>expression
parameters是一個參數列表,在Lambda表達式中只有一個輸入參數時能夠不用括號,不然括號是必須的,兩個及以上參數用逗號隔離,沒有參數時使用空括號表示
使用關鍵字對應方法進行一系列操做