一、簡介
1、什麼是linq?
linq(language integrated query) 語言繼承查詢。
linq是一組語言特性和api,可以使用統一的方式編寫各種查詢。用於儲存和檢索來自不同資料來源的資料,從而消除了程式設計語音和資料庫之間的不匹配,以及為不同型別的資料來源提供單個查詢介面。
linq總是使用物件,因此可以使用相同的查詢語法來查詢和轉換xml、物件集合、sql資料庫、ado.net資料庫以及任何其他可用的linq提供程式格式的資料
2、linq主要包含三個部分:
1、linq to objects 主要負責物件的查詢。
2、linq to xml 主要負責xml的查詢。
3、linq to ado.net 主要負責資料庫的查詢。
linq to sql
linq to dataset
linq to entities
3、linq的優勢:
1、熟悉的語言:開發人員不必為每種型別的資料來源或者資料格式學習心的語言。
2、更少的編碼:相比傳統的方式,linq減少了要編寫的**量。
3、可讀性強:linq增加了**的可讀性,因此其他開發人員可以很輕鬆的理解和維護。
4、標準化的查詢方式:可以使用相同的linq語法查詢多個資料庫。
5、型別檢查:程式會在編譯的時候提供型別檢查。
7、整形資料:linq可以檢索不同形狀的資料。
二、為什麼要使用linq?
舉個栗子:現在遇到乙個問題,對乙個整數型別的陣列,找到裡面的偶數,並進行降序排序。不使用linq我們該如何解決?
1、定義乙個整數陣列list,用來存放所有的偶數
2、foreach遍歷陣列,找出給定陣列內偶數,將偶數放入list陣列
3、sort為公升序排序,為了達到降序的目的,所以排序好後需要反轉。
使用for迴圈比較麻煩,並且**可讀性、維護性差。
為了提高**可讀性,以及可維護性,我們使用委託來編寫:
1、宣告委託
2、定義乙個where方法,傳入待處理的陣列,委託
3、將foreach封裝
4、呼叫方法時,再實現委託
在此解釋下為什麼要用委託?
使用委託使程式設計師可以將方法引用封裝在委託物件內。然後可以將該委託物件傳遞給可呼叫所引用方法的**,而不必在編譯時知道將呼叫哪個方法。與c或c++中的函式指標不同,委託是物件導向,而且是型別安全的。
回歸正題,雖然使用了委託增加了**可讀性,但是我們需要**更緊湊和可讀!所以我們引入lambda表示式查詢
下面我們演示如何使用linq和lambda表示式根據特定條件來查詢陣列
var在此為乙個隱式型別,在宣告乙個變數(並且同時給它賦值)的時候,完全不用指定變數的型別,只要乙個var就解決問題了
這樣寫不僅不會影響效能因為它與顯示宣告編譯後產生的中間語言**(il**)是完全一樣的(編譯器根據變數的值,推到出變數的型別,才產生的il**)
注意:使用var時不能只宣告而不賦值,因為不賦值編譯器無法推到這個變數是什麼型別
注意:此處呼叫的where方法為ienumerable下的方法,並非上面我們自己書寫的方法
這樣使用linq與lambda表示式來編寫**,是不是變得簡潔明瞭太多?**變的更為緊湊,可讀性更強。
linq 初步認識
linq如果不能用的話 重灌一下vs就好了 linq,語言整合查詢 language integrated query 是一組用於c 和visual basic語言的擴充套件。它允許編寫c 或者visual basic 以查詢資料庫相同的方式操作記憶體資料。是一種高整合化的資料庫訪問技術。他與ado...
LINQ教程一 LINQ簡介
一 為什麼要使用linq 要理解為什麼使用linq,先來看下面乙個例子。假設有乙個整數型別的陣列,找到裡面的偶數並進行降序排序。1 using system 2using system.collections.generic 3using system.linq 4using system.text...
LinQ學習筆記(一)
查詢表示式必須以 from 子句開頭,並且必須以 select 或 group 子句結尾。在第乙個 from 子句和最後乙個 select 或 group 子句之間,查詢表示式可以包含乙個或多個下列可選子句 where orderby join let 甚至附加的 from 子句。還可以使用 int...