欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解LINQ入門(mén)(上篇)

 更新時(shí)間:2019年12月16日 09:36:25   作者:森大科技  
這篇文章主要介紹了詳解LINQ入門(mén)(上篇),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前 言

最近和我們老大一起做技術(shù)面試(我是旁聽(tīng)的),發(fā)現(xiàn)前來(lái)面試的沒(méi)幾個(gè)掌握甚至是丁點(diǎn)了解LINQ。這讓我很納悶,LINQ伴隨2008一起發(fā)布至今難道大家真的沒(méi)時(shí)間去了解一下或者學(xué)習(xí)一下這個(gè)應(yīng)用基礎(chǔ)嗎。甚至問(wèn)及有些人LINQ是什么,答題者想都不想 LINQ TO SQL, 崩潰!沒(méi)錯(cuò),LINQ是可以TO SQL,但是除了SQL,LINQ就無(wú)所作為了?非也。因此在這里和大家一起分享學(xué)習(xí)LINQ。本文適合以下讀者, 如果你是不符合者請(qǐng)賞臉捧個(gè)場(chǎng),3Q

  • 從未觸碰過(guò)LINQ的
  • 對(duì)LINQ有過(guò)了解但是從未實(shí)戰(zhàn)過(guò)的
  • 打算學(xué)習(xí)LINQ的

簡(jiǎn) 介

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

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

如果按照原來(lái)的思路,那么編碼也許如下:

說(shuō)明: 

List<int> c = new List<int>();
foreach(int a in A){

  foreach(int b in b) {

    if (a==b) {
      c.add(a);
    }

  }

}

說(shuō)明: 

是不是覺(jué)得上面這段雖然沒(méi)什么問(wèn)題,但是很丑陋。如果我們引用LINQ來(lái)編寫(xiě)呢:

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

語(yǔ) 法

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

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

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

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

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

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

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

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

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

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

    let:         引入一個(gè)用于存儲(chǔ)查詢(xún)表達(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. 語(yǔ)法說(shuō)明,每個(gè)LINQ語(yǔ)句都以from作為開(kāi)頭,以select作為結(jié)束,這點(diǎn)和T-SQL語(yǔ)法不通的切記先入為主的思考。其他關(guān)鍵字如where則類(lèi)似T-SQL作為篩選判斷條件。

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

擴(kuò) 展

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

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

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

  2. 匿名類(lèi)型:  

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

案 例

普通查詢(xún)

var query = from num in num 
      select num.ProperyA

篩選查詢(xún)

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

分組查詢(xún)

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

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

內(nèi)聯(lián)查詢(xú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)查詢(xú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í)例集合

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • c#:CTS類(lèi)型系統(tǒng)

    c#:CTS類(lèi)型系統(tǒng)

    CTS通用類(lèi)型系統(tǒng),是.Net中一套定義類(lèi)型的規(guī)則。我們要掌握c#開(kāi)發(fā),首先要建立這個(gè)類(lèi)型概念,只有知道c#的元素是什么類(lèi)型,才能進(jìn)行相關(guān)的分析和選材。
    2012-12-12
  • C# 添加、修改和刪除PDF書(shū)簽的實(shí)例代碼

    C# 添加、修改和刪除PDF書(shū)簽的實(shí)例代碼

    本篇文章主要介紹了C# 添加、修改和刪除PDF書(shū)簽的實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • C#數(shù)組初始化簡(jiǎn)析

    C#數(shù)組初始化簡(jiǎn)析

    C#數(shù)組與其它C系列語(yǔ)言有著很多的不同,以前接觸的時(shí)候理解出現(xiàn)很大的偏差。尤其是對(duì)多維數(shù)組的認(rèn)識(shí),本文將詳細(xì)介紹C#數(shù)組初始化,需要的朋友可以參考下
    2012-11-11
  • C#利用反射來(lái)判斷對(duì)象是否包含某個(gè)屬性的實(shí)現(xiàn)方法

    C#利用反射來(lái)判斷對(duì)象是否包含某個(gè)屬性的實(shí)現(xiàn)方法

    這篇文章主要介紹了C#利用反射來(lái)判斷對(duì)象是否包含某個(gè)屬性的實(shí)現(xiàn)方法,很有借鑒價(jià)值的一個(gè)技巧,需要的朋友可以參考下
    2014-08-08
  • C#實(shí)現(xiàn)自動(dòng)填充文字內(nèi)容到指定圖片

    C#實(shí)現(xiàn)自動(dòng)填充文字內(nèi)容到指定圖片

    這篇文章主要為大家詳細(xì)介紹了如何使用C#實(shí)現(xiàn)自動(dòng)填充文字內(nèi)容到指定圖片,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-04-04
  • C# Chart繪制簡(jiǎn)單圖形波形

    C# Chart繪制簡(jiǎn)單圖形波形

    這篇文章主要為大家詳細(xì)介紹了C# Chart繪制簡(jiǎn)單圖形波形,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • NumberToUpper數(shù)字轉(zhuǎn)中文詳解

    NumberToUpper數(shù)字轉(zhuǎn)中文詳解

    本文介紹NumberToUpper數(shù)字轉(zhuǎn)中文的方法,大家參考使用吧
    2013-12-12
  • C#中DataGridView導(dǎo)出Excel的兩種方法

    C#中DataGridView導(dǎo)出Excel的兩種方法

    這篇文章主要介紹了C#中DataGridView導(dǎo)出Excel的兩種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié)

    Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié)

    這篇文章主要介紹了Qt讀取本地系統(tǒng)時(shí)間的幾種方式小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • C#實(shí)現(xiàn)偽裝文件夾功能

    C#實(shí)現(xiàn)偽裝文件夾功能

    這篇文章主要為大家詳細(xì)介紹了如何利用C#實(shí)現(xiàn)偽裝文件夾的功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C#有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-12-12

最新評(píng)論