溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

LINQ入門知識點(diǎn)有哪些

發(fā)布時(shí)間:2021-12-01 15:53:55 來源:億速云 閱讀:118 作者:iii 欄目:編程語言

本篇內(nèi)容主要講解“LINQ入門知識點(diǎn)有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“LINQ入門知識點(diǎn)有哪些”吧!

簡 介

LINQ 是什么?引用官方術(shù)語“語言集成查詢 (LINQ) 是 Visual Studio 2008 和 .NET work 3.5 版中引入的一項(xiàng)創(chuàng)新功能,它在對象領(lǐng)域和數(shù)據(jù)領(lǐng)域之間架起了一座橋梁。” 那么LINQ給我們帶來了什么,請看以下例子:

問:有序列A=int[]{1,2,3,4,5,6,7,8,0}; B=int[]{2,4,7,8,9}。請求出包含A和B共同值的序列C。

如果按照原來的思路,那么編碼也許如下:

說明:

List<int> c = new List<int>();foreach(int a in A){  foreach(int b in b) {    if (a==b) {      c.add(a);    }  }}

說明:

是不是覺得上面這段雖然沒什么問題,但是很丑陋。如果我們引用LINQ來編寫呢:

IEnumerable<int> C = from a in A           from b in B           where a==b           select a;

語 法

  1. LINQ所處在的主要命名空間:System.Linq

  2. LINQ的處理的核心對象就是IEnumerable可枚舉對象也包括了泛型枚舉,換句話說當(dāng)你要處理的對象為IEnumerable類型對象時(shí)即可使用LINQ操作它。且在沒有經(jīng)過其他處理的情況下將返回一個(gè)新的IEnumerable序列,注意LINQ有一個(gè)特性“延遲加載”這個(gè)將在后續(xù)說明。

3. 關(guān)鍵字(摘自MSDN):  

    from : 指定數(shù)據(jù)源和范圍變量(類似于迭代變量)。

    where: 根據(jù)一個(gè)或多個(gè)由邏輯“與”和邏輯“或”運(yùn)算符(&& 或 ||)分隔的布爾表達(dá)式篩選源元素。

    select: 指定當(dāng)執(zhí)行查詢時(shí)返回的序列中的元素將具有的類型和形式。

    group: 按照指定的鍵值對查詢結(jié)果進(jìn)行分組。

    into: 提供一個(gè)標(biāo)識符,它可以充當(dāng)對 join、group 或 select 子句的結(jié)果的引用。

    orderby: 基于元素類型的默認(rèn)比較器按升序或降序?qū)Σ樵兘Y(jié)果進(jìn)行排序。

    join: 基于兩個(gè)指定匹配條件之間的相等比較來聯(lián)接兩個(gè)數(shù)據(jù)源。

    let: 引入一個(gè)用于存儲查詢表達(dá)式中的子表達(dá)式結(jié)果的范圍變量。

    in: join 子句中的上下文關(guān)鍵字。

    on: join 子句中的上下文關(guān)鍵字。

    equals: join 子句中的上下文關(guān)鍵字。

    by: group 子句中的上下文關(guān)鍵字。

    ascending:orderby 子句中的上下文關(guān)鍵字。

    descending:orderby 子句中的上下文關(guān)鍵字。

  4. 語法說明,每個(gè)LINQ語句都以from作為開頭,以select作為結(jié)束,這點(diǎn)和T-SQL語法不通的切記先入為主的思考。其他關(guān)鍵字如where則類似T-SQL作為篩選判斷條件。

樣例:IEnumerable<T> nums = from n in nums where .... orderby... select....

擴(kuò) 展

從 .net 3.0 開始 MS 就給我們引進(jìn)了其他一些新的特性,由于篇幅關(guān)系在這里給大家簡單的介紹幾個(gè)LINQ常用到的特性:

  1. 關(guān)鍵字 var :

    指示編譯器根據(jù)初始化語句右側(cè)的表達(dá)式推斷變量的類型。 推斷類型可以是內(nèi)置類型、匿名類型、用戶定義類型或 .NET Framework 類庫中定義的類型。這樣我們就可以在上述的LINQ表達(dá)式中 例如可簡寫為: var nums = from n in nums where .... orderby... select....

  2. 匿名類型:  

    匿名類型提供了一種方便的方法,可用來將一組只讀屬性封裝到單個(gè)對象中,而無需首先顯式定義一個(gè)類型。 類型名由編譯器生成,并且不能在源代碼級使用。 每個(gè)屬性的類型由編譯器推斷。例如:var obj = new {A="a", B="b"}; 而LINQ則可以為 var nums = from obj in objs select new {obj.A, obj.B}

案 例

普通查詢

var query = from num in num       select num.ProperyA

篩選查詢

var query = from obj in objs      where obj.ProperyA > Condition      select obj

分組查詢

var query = from obj in objs      group obj by obj.PropertyA into g      orderby g.Key      select g;

注意,在此示例里,關(guān)鍵字 into 不是必須的,使用 into 時(shí),必須繼續(xù)編寫該查詢,并最終用一個(gè) select 語句或另一個(gè) group 子句結(jié)束該查詢。

內(nèi)聯(lián)查詢

var query= from obj1 in objs1      join obj2 in objs2 on obj1.ID equals obj2.ID      select new { A= obj1.Property, B = obj2.Property };

左外聯(lián)查詢

var query = from obj1 in objs1      join obj2 in objs2 on obj1.ID equals obj2.Obj1ID into g      from subpet in g.DefaultIfEmpty()      select new { P1 = obj1.P1, P2 = (subpet == null ? null : subpet.P2 ) };

注意,此處涉及到.net 3.5 新特性靜態(tài)擴(kuò)展方法(后續(xù)介紹不影響理解)DefaultIfEmpty():如果序列為空,則返回一個(gè)具有默認(rèn)值的單一實(shí)例集合

到此,相信大家對“LINQ入門知識點(diǎn)有哪些”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI