C 學習筆記 LINQ to Object

2022-07-14 10:03:17 字數 3128 閱讀 5657

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查詢應用於原始陣列

1

static

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介面的型別。

static

void 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查詢,而始終可以獲得最新的最好的結果。

1

static

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查詢,以獲取資料快照。然後這些資料快照就可以獨立進行操作了:

1

static

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...