LINQ系列 C 中與LINQ相關特性

2021-08-03 07:01:21 字數 2713 閱讀 3287

1. 匿名型別

通過關鍵字var定義匿名型別,編譯器將根據運算子右側表示式的值來發出乙個強型別。

使用匿名型別時要遵守的一些基本規則:

◊ 匿名型別必須有乙個初始化值,而且這個值不能是空值(null),因為型別是根據初始化器推斷出來的;

◊ 匿名型別可以用於簡單型別,也可以用於複雜型別。用於定義簡單型別時,其價值不大。復合匿名型別需要有成員宣告;

◊ 匿名型別不能用於類的字段;

◊ 匿名型別可以在for迴圈中用作初始化器;

◊ 可以使用new關鍵字;陣列的初始化器必須使用new關鍵字;

◊ 匿名型別可以用於陣列;

◊ 所有匿名型別都派生自object型別;

var title = "

linq to object

";

1.1 復合匿名型別

var product = new ;
1.2 在for/foreach語句中使用匿名型別

var fibonacci = new

int ;

for (var i = 0; i < fibonacci.length; i++)

var fibonacci = new

int ;

foreach (var number in

from f in fibonacci where f > 5

select

f)

1.3 匿名型別與using

using( var connection = new

sqlconnection(connectionstring))

2. 陣列初始化器

使用關鍵字new初始化陣列。

var fibonacci = new

int;

3. 匿名泛型方法

func factorial = delegate(long

n)

long result = 1

;

for (int i = 2; i <= n; i++)

return

result;

};console.writeline(factorial(

6));

//

using system.diagnostics;

func factorial = delegate(long

n)))

: n;

};console.writeline(factorial(

6));

4. 自動實現屬性

public

string productname

設定唯讀屬性:

public

string productname

5.物件初始化器和集合初始化器

物件初始化器:在不呼叫類的建構函式以宣告性方式建立乙個新的物件,並設定該物件的各個屬性的值。

product product = new

product

;

集合初始化器用來初始化乙個集合。

list num = new list ;
結合物件初始化器使用:

listproducts = new list,

new product

};

6.  lambda表示式

lambda表示式是乙個匿名函式,它可以包含表示式和語句,並且可用於建立委託或表示式目錄樹型別。

lambda表示式的基本形式:

(input parameters) => expression
其中,input parameters表示輸入引數,expression表示表示式。輸入引數的數量可以為空,1個或多個。

當輸入引數為空是,lambda表示式左邊的()不能省略。

() => console.writeline("

empty

");

funcgetdatetime = () => datetime.now;
當lambda表示式的輸入引數的數量為1時,輸入引數的()可以省略。

x => x * x;
當lambda表示式的輸入引數的數量大於1時,輸入引數的()是必須的,且引數之間使用逗號分隔。

(x, y) => x * y;
lambda的delegate形式轉換:

delegate(int x) ;
7. 查詢表示式

var products = from p in

ctx.products

where p.unitprice >10m

select p;

8. 擴充套件方法

擴充套件方法是c#中乙個重要的特性,其對於linq的實現起著關鍵的作用。擴充套件方法在使用上類似於靜態方法,但在本質上其是例項方法。

擴充套件方法在引數前加上this關鍵字,引數的類似表示這個擴充套件方法要對這個型別進行擴充套件。

public

static

class

extensions$"

return

regex.ismatch(value);}}

Linq系列教程一 Linq介紹

前言 許多朋友在編寫以資料庫為中心的應用程式是時常會因為呼叫資料庫以及維護資料的關係等而煩惱,繁雜的sql字串語句,sql注入檢測,語法,字元長度等,有些時候為了在程式上更方便使用還要寫一些看似不重要只為了方便的儲存過程。現在好了從.net framework 3.5版本開始我們可以使用物件導向的方...

Linq原理1 LINQ簡介及其相關的C 擴充套件

using system using system.collections.generic using system.linq using system.text using system.collections class program 方案二 使用匿名的方法 int oddnum common...

C 3 0 入門系列 linq (一)

談到dlinq 就不得不先說linq 讓我們先看看什麼是linq linq 是language integrated query 的縮寫。那麼事實上dlinq 就是database language integrated query 的縮寫。linq 和dlinq 最大的區別就在與linq 是對記憶...