1. 程式人生 > 實用技巧 >LINQ之查詢語法

LINQ之查詢語法

新開一節LINQ的入門講解。

LINQ(Language Integrated Query)語言整合查詢,是C#語言的擴充套件,它的主要功能是從資料集中查詢資料,就像通過sql語句從資料庫查詢資料一樣(本節講的linq查詢語法跟sql語法也是類似),LINQ將這一形式實現在了C#中,熟悉JAVA的同學,LINQ就是JAVA中的StreamAPI。

下面先看一個例子:

int[] vs = { 1, 2, 3, 4, 5 };
var a = from v in vs
        where v > 2
        select v;
foreach (var t in a)
{
    Console.Write(t);
}

執行結果為:

以上程式碼的目的是輸出陣列中大於2的值,第2-4行就是我們本節要講的LINQ查詢語法。它們很像sql語句,其實並不是,from,where等是C#中的關鍵字,但可以稍微使用sql來理解這種形式。

使用var這個關鍵字來儲存這個linq邏輯,當然也可以理解為var儲存了資料,但這並不準確,其實linq中存在一種延遲查詢的機制,當我們在呼叫foreach迴圈的時候,才會真正執行linq邏輯去查詢資料,在沒有呼叫foreach之前,記憶體中是沒有查詢到的資料的,注意,foreach不屬於linq,它只是用來展示結果。

from

對於一個可列舉的資料(即繼承了IEnumerable介面),可以進行linq查詢,使用from變數名 in 資料來源的形式(from必須作為開頭),定向一個查詢,以上述程式碼為例,變數v代表陣列vs中的每一個數據,它類似foreach括號裡的程式碼,這表明,將來會一個個遍歷數組裡邊的資料,定義變數名是為了供後續的限定查詢使用。

where

where就很容易理解,跟sql語句的語法一樣,用於篩選資料,它可以用於任意的布林表示式上,對於結果為true的資料進行歸併,它是可選的,但是我們一般都會用到,沒有where,返回的永遠都是所有資料。

select

select用於指定結果集中包含哪些資料,也可以理解為將查到的資料返回出去,它是必要的,如果是查詢物件的集合,可以通過select指定返回物件的某個屬性值,這也是select重要的原因。

group

group用於分組資料,對於一個linq查詢,總要以select或者group 結尾,group要配合by,語法為group分組物件 by 分組依據現在將以上程式碼改寫一下,看一下group具體用法:

int[] vs = { 1, 2, 3, 4, 5 };
​
var a = from v in vs
        where v > 1
        group v by v > 3;
foreach (var t in a)
{
    foreach (var i in t)
    {
        Console.Write(i);
    }
    Console.WriteLine();
}

執行結果為:

將結果分組,大於3的一組,小於3的一組,結果是一個二維陣列。

其它

LINQ共有50個查詢關鍵字,下面列舉其它的一些常用查詢語法,欲瞭解更多語法,請查閱相關文件。

​join…in…on…equals... 關聯多個數據源關聯多個數據源
let 標識儲存子表示式的結果變數
orderby、descending orderby標識的變數升序顯示,變數名後加descending標識降序
into into後可以新開一個查詢,通過into引用新查詢的結果

這是我的公眾號二維碼,獲取最新文章,請關注此號