LINQ學習筆記

基礎概念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表達式中只有一個輸入參數時能夠不用括號,不然括號是必須的,兩個及以上參數用逗號隔離,沒有參數時使用空括號表示

使用關鍵字對應方法進行一系列操做

相關文章
相關標籤/搜索