1、linq特有的程式設計結構
隱式型別本地變數:c#的var關鍵字允許定義不顯式指定實際資料型別的本地變數。不過由於編譯器將根據初始值推斷其資料型別,所有該變數仍然是強型別的。
物件和集合初始化語法:它允許我們在建立類或結構變數的同時設定其屬性。
lambda表示式:c#lambda操作符(=>)可以用來構建lambda表示式,並且在呼叫以強型別的委託作為引數的方法時,也十分有用。
擴充套件方法:c#擴充套件方法不使用子類就能夠像已知類中新增新的功能。同樣,它還可以向不能有子類的密封類和結構中新增新的功能。在編寫擴充套件方法時,第乙個引數必須使用this限定符,用來表示被擴充套件的型別。擴充套件方法只能定義在靜態類中,並且必須使用static關鍵字宣告為靜態方法。
匿名型別:該特性可以快速建立資料的「結構」,編譯器將根據名稱/值對的結合在編譯時生成新的類。該型別是基於值的語義構建的,因此system.object中的每個虛方法都要重寫。要定義乙個匿名型別,可以宣告乙個隱式型別變數,並使用物件初始化語法指定資料的結構。
2、linq查詢表示式是強型別的(跟傳統的sql語句有所不同)。
3、核心linq程式集
system.core.dll:定義了代表核心linq api的型別;
system.data.datasetextensions.dll:定義了許多態別來將ado.net型別融入linq變成正規化;
system.xml.linq.dll:提供了使用linq處理xml文件資料所需的功能。
4、將linq查詢應用於原始陣列
1static
void main(string args)
2 67
static
void queryoverstrings()
8 ;
1112
//構建乙個查詢表示式,來代表陣列中有乙個空格的項
13 ienumerable subset = from g in currentvideogames where g.contains("
") orderby g select g;
1415
//輸出結果
16foreach (string s in subset)
17 console.writeline(s);
18 }
一般來說,在獲取linq查詢的結果集時,應該總是使用隱式型別。但要記住的是,在絕大多數情況下,真正的返回值是實現了泛型ienumerable介面的型別。
staticvoid queryoverints();//
只輸出小於10的項
//使用隱式型別
var subset = from i in numbers where i < 10
select i;
foreach (var i in subset)
console.writeline(i);
reflectoverqueryresults(subset);
}
5、linq和擴充套件方法:雖然system.array並沒有直接實現ienumerable介面,但它通過靜態的system.linq.enumerable類型別間接地得到了該型別所需的功能,同時還得到了許多其他的與linq相關成員。
6、延遲執行的作用:有關linq查詢表示式另乙個重要的地方是在我們迭代內容之前,它們不會真正進行運算,嚴格的說叫做延遲執行。這個方式的好處在於可以為相同的容器多次應用相同的linq查詢,而始終可以獲得最新的最好的結果。
1static
void queryoverints()
2 ;45
//只輸出小於10的項6//
使用隱式型別
7var subset = from i in numbers where i < 10
select i;89
foreach (var i in subset)
10 console.writeline(i);
11 console.writeline();
1213
//修改一些資料
14 numbers[0] = 4;
1516
//再一次運算
17foreach (var j in subset)
18 console.writeline(j);
19 console.writeline();
2021 reflectoverqueryresults(subset);
22 }
7、立即執行的作用:如果希望foreach邏輯外部運算linq表示式,可以呼叫由enumerable型別定義的許多擴充套件方法來完成。enumerable定義了諸如toarray()、todictionary()以及tolist()在內的許多擴充套件方法。在呼叫這些方法的同時將執行linq查詢,以獲取資料快照。然後這些資料快照就可以獨立進行操作了:
1static
void immediateexecution()
2 ;45
//立即獲取資料為int
6int subsetasintarray =
7 (from i in numbers where i < 10
select i).toarray();89
//立即獲取資料為list
10 list subsetaslistofints =
11 (from i in numbers where i < 10
select i).tolist();
12 }
整個linq表示式用圓括號括起來,這樣就能將它強制轉換為正確的實際型別來呼叫enumerable的擴充套件方法。c#編譯器可以準確檢測泛型項的型別引數,我們不需要指定型別引數。
8、返回linq查詢的結果
9、將查詢應用到集合物件
10、c#linq查詢操作符
C 學習筆記( )
一 語法 迴圈 foreach 型別識別符號 in 表示式 code 用法 例子int temp foreach int num in temp 每次從temp取乙個元素賦給num直至取完 console.writeline n num 每行顯示乙個元素 執行結果 c 中唯讀 只寫控制 class ...
C 學習筆記
1.函式特徵 有函式頭和函式體 接受乙個引數 返回乙個值 需要乙個原型。2.c 命名規則 在名稱中只能使用字母字元 數字和下劃線 名稱的第乙個字元不能是數字 區分大寫字母和小寫字母 不能將c 關鍵字用作名稱 以兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現 編譯器及其使用的資源 使用,以乙個下劃...
c 學習筆記
屬性 屬性開頭字母大寫 屬性可以判斷輸入的非法值 屬性本身不儲存值 依靠字段 索引器 using system using system.collections.generic using system.linq using system.text namespace b try catch exc...