LINQ教程一 LINQ簡介

2021-09-07 16:27:28 字數 4547 閱讀 7002

一、為什麼要使用linq

要理解為什麼使用linq,先來看下面乙個例子。假設有乙個整數型別的陣列,找到裡面的偶數並進行降序排序。

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

linqofselectoperation8;

15//

定義乙個整數型別的集合,用來存放陣列中的偶數

16 list list = new list();

17//

遍歷陣列查詢出偶數放到集合中

18foreach (int i in

ints)

1925}26

27//

正序排序

28list.sort();

29//

反轉30

list.reverse();

31//

輸出32 console.writeline(string.join(","

,list));

3334

console.readkey();35}

36}37 }

使用for迴圈很麻煩,而且不可維護和可讀。c#2.0引入了delegate,可以使用委託來處理這種場景,**如下圖所示:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

linqofselectoperation825

}2627return

result;28}

29}30class

program31;

3637

//delegate(int item)表示委託的實現

38 list list = intextension.where(ints, delegate(int

item)

39).tolist();

42//

正序排序

43list.sort();

44//

反轉45

list.reverse();

46//

輸出47 console.writeline(string.join(","

, list));

4849

console.readkey();50}

51}52 }

所以,有了c#2.0,通過使用委託有了**的優勢,不必使用for迴圈來查詢不同條件的陣列。例如你可以使用相同的委託來查詢陣列中的奇數,並降序排序輸出,**如下圖所示:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

linqofselectoperation825

}2627return

result;28}

29}30class

program31;

3637

//delegate(int item)表示委託的實現

38 list list = intextension.where(ints, delegate(int

item)

39).tolist();

42//

正序排序

43list.sort();

44//

反轉45

list.reverse();

46//

輸出47 console.writeline(string.join(","

, list));

4849

console.readkey();50}

51}52 }

雖然使用delegate可以使程式的可讀性增加了,但是c#團隊認為他們仍然需要使**更加緊湊和可讀,所以他們在c#3.0中引入了擴充套件方法、lambda表示式、匿名型別等新特性,你可以使用c#3.0的這些新特性,這些新特性的使用linq的前提,可以用來查詢不同型別的集合,並返回需要的結果。

下面的示例演示了如何使用linq和lambda表示式根據特定條件來查詢陣列,示例**如下:

1

using

system;

2using

system.collections.generic;

3using

system.linq;

4using

system.text;

5using

system.threading.tasks;67

namespace

linqofselectoperation8;

1516

//使用linq和lambda表示式查詢陣列中的偶數

17int intevens= ints.where(p => p % 2 == 0

).toarray();

18//

使用linq和lambda表示式查詢陣列中的奇數

19int intodds = ints.where(p => p % 2 != 0

).toarray();

2021

//輸出

22 console.writeline("

偶數:" + string.join(","

, intevens));

23 console.writeline("

奇數:" + string.join(","

, intodds));

2425

console.readkey();26}

27}28 }

在上面的例子中可以看到,我們在單個語句中使用linq和lambda表示式指定不同的查詢條件,因此,linq使**更加緊湊和可讀,並且它也可以用於查詢不同的資料來源。看到這裡的時候,你可能會問:究竟什麼是linq呢?下面將會具體講解什麼是linq。

二、什麼是linq

長期以來,開發社群形成以下的格局:

1、物件導向與資料訪問兩個領域長期**,各自為政。

2、程式語言中的資料型別與資料庫中的資料型別形成兩套不同的體系,例如:

c#中字串用string資料型別表示。

sql中字串用nvarchar/varchar/char資料型別表示。

3、sql編碼體驗落後

沒有智慧型感知效果。

沒有嚴格意義上的強型別和型別檢查。

4、sql和xml都有各自的查詢語言,而物件沒有自己的查詢語言。

上面描述的問題,都可以使用linq解決,那麼究竟什麼是linq呢?

linq(language integrated query)即語言整合查詢。

linq是一組語言特性和api,使得你可以使用統一的方式編寫各種查詢。用於儲存和檢索來自不同資料來源的資料,從而消除了程式語言和資料庫之間的不匹配,以及為不同型別的資料來源提供單個查詢介面。

linq總是使用物件,因此你可以使用相同的查詢語法來查詢和轉換xml、物件集合、sql資料庫、ado.net資料集以及任何其他可用的linq提供程式格式的資料。

linq主要包含以下三部分:

1、linq to objects      主要負責物件的查詢。

2、linq to xml           主要負責xml的查詢。

3、linq to ado.net   主要負責資料庫的查詢。

三、linq的優勢

1、熟悉的語言:開發人員不必為每種型別的資料來源或資料格式學習新的語言。

2、更少的編碼:相比較傳統的方式,linq減少了要編寫的**量。

3、可讀性強:linq增加了**的可讀性,因此其他開發人員可以很輕鬆地理解和維護。

4、標準化的查詢方式:可以使用相同的linq語法查詢多個資料來源。

5、型別檢查:程式會在編譯的時候提供型別檢查。

7、整形資料:linq可以檢索不同形狀的資料。

Linq系列教程一 Linq介紹

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

Linq查詢簡介

查詢是一種從資料來源檢索資料的表示式。查詢通常用專門的查詢語言來表示。隨著時間的推移,人們已經為各種資料來源開發了不同的語言 例如,用於關聯式資料庫的 sql 和用於 xml 的 xquery。因此,開發人員不得不針對他們必須支援的每種資料來源或資料格式而學習新的查詢語言。linq 通過提供一種跨各...

LINQ簡易教程

linq,全稱是language intergrated query的縮寫,即 整合語言查詢 利用linq可以使資料庫的表像類一樣使用,簡單方便。下面來用很短的篇幅簡單地介紹一下linq的使用方法。這個是乙個準備工作,也可以使用access,oracle等其他資料庫,這裡採用sql server是因...