自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

System.LINQ程序集介紹

開發(fā) 后端
這里介紹System.LINQ程序集,以及介紹source參數(shù),根據(jù)擴(kuò)展方法的語(yǔ)法我們知道這個(gè)source參數(shù)就是調(diào)用了這個(gè)方法的對(duì)象。

LINQ有很多值得學(xué)習(xí)的地方,這里我們主要介紹LINQ的一些強(qiáng)大功能,包括介紹System.LINQ程序集等方面。

LINQ,即Language Integrated Query。很多人熟悉SQL語(yǔ)言,用它來操作數(shù)據(jù)庫(kù)非常方便?,F(xiàn)在在C#3.0中也可以使用相同的語(yǔ)法來操作各種數(shù)據(jù),包括數(shù)組,文件,數(shù)據(jù)庫(kù)等。

下面看一個(gè)例子:

  1. class Program  
  2. ...{  
  3. static void Main(string[] args)  
  4. ...{  
  5. string[] names=...{"Everett", "Albert", "George", "Harris", "David" };  
  6. var items=from name in names  
  7. where name.Length>=6  
  8. orderby name  
  9. select name.ToUpper();  
  10. foreach(var item in items)  
  11. Console.WriteLine(item);  
  12. }  

是不是對(duì)上面的from,where,orderby等單詞很熟悉,我們可以很輕松的像查詢數(shù)據(jù)庫(kù)一樣查詢某些數(shù)組。其實(shí)上述表達(dá)式等價(jià)于下面這樣的寫法:

  1. var items=names.Where(name=>name.Length>=6).
    OrderBy(
    name=>name).Select(name=>name.ToUpper()); 

那么我們?yōu)槭裁茨茉跀?shù)組上應(yīng)用這些方法呢,本來數(shù)組上沒有這些方法啊?回憶一下我們?cè)瓉碚f過的內(nèi)容,擴(kuò)展方法,對(duì),我們?cè)谶@里看到擴(kuò)展方法的用武之地了。而且我們也看到了Lambda表達(dá)式的應(yīng)用使得語(yǔ)句更加簡(jiǎn)潔,易懂。這些擴(kuò)展方法定義在哪里呢?我們可以在System.LINQ程序集里面看到這樣的定義:

  1. namespace System.LINQ ...{   
  2. public static class Enumerable ...{   
  3. public static IEnumerable<T> Where<T>(   
  4. this IEnumerable<T> source, Func<T, bool> predicate) ...{   
  5.  
  6. foreach (T item in source)   
  7. if (predicate(item)  
  8. )   
  9. yield return item;   
  10. }   
  11. }   
  12. }  

這里我們可以清晰的看到許多this關(guān)鍵字,這些正是擴(kuò)展方法的標(biāo)志。若果我們對(duì)Lambda表達(dá)式不是很熟悉的化,上面的LINQ語(yǔ)句還可以進(jìn)一步轉(zhuǎn)化成委托的形式。

  1. Func<string, bool> filter = delegate (string s) ...{return s.Length >=6;};   
  2. Func<string, string> extract = delegate (string s) ...{return s; };   
  3. Func<string, string> project = delegate (string s) ...{return s.ToUpper(); };   
  4. var items = names.Where(filter) .OrderBy(extract) .Select(project);  

有一個(gè)問題,我們會(huì)注意到items前面是用var做它的類型,那么有沒有提出這樣的疑問,這個(gè)var到底是什么類型呢?我們仔細(xì)看一下那個(gè)System.LINQ程序集,就會(huì)發(fā)現(xiàn)擴(kuò)轉(zhuǎn)方法返回的是IEnumerable類型,一個(gè)泛型接口,沒錯(cuò)var就是這個(gè)泛型接口。還有一個(gè)問題就是當(dāng)names滿足什么條件時(shí),我們可以應(yīng)用LINQ表達(dá)式進(jìn)行查詢。這一點(diǎn)還要從那個(gè)程序集上仔細(xì)觀察。我們會(huì)發(fā)現(xiàn)有一個(gè)source參數(shù),根據(jù)擴(kuò)展方法的語(yǔ)法我們知道這個(gè)source參數(shù)就是調(diào)用了這個(gè)方法的對(duì)象。那么我們可以推斷出這個(gè)對(duì)象要能轉(zhuǎn)換成IEnumerable。那什么類型可以成功轉(zhuǎn)換呢?很顯然只要實(shí)現(xiàn)了IEnumerable這個(gè)泛型接口的類型都可以轉(zhuǎn)換。譬如數(shù)組類型,List,等等。當(dāng)我們還可以自己定義類型只要實(shí)現(xiàn)了這個(gè)接口就可以用LINQ對(duì)這個(gè)類型進(jìn)行操作

這一次只是簡(jiǎn)單的介紹一下LINQ,以后我們?cè)诰唧w的講一些應(yīng)用,不過從介紹中我們看到LINQ的一些強(qiáng)大功能。

【編輯推薦】

  1. Linq匿名類型簡(jiǎn)單概述
  2. Linq隨機(jī)讀取數(shù)據(jù)淺析
  3. Linq Lambda表達(dá)式全面分析
  4. Linq擴(kuò)展方法簡(jiǎn)單分析
  5. 初探Linq局部變量類型
責(zé)任編輯:佚名 來源: 百度空間
相關(guān)推薦

2009-09-11 09:22:14

System.Linq

2009-09-15 10:34:32

System.Data

2009-09-15 17:16:58

LINQ查詢操作符

2009-08-27 10:14:04

LINQ基礎(chǔ)概念

2009-09-08 13:07:15

介紹Linq to S

2009-09-08 10:50:20

2009-09-10 17:30:15

LINQ Where子

2009-09-11 09:41:19

LINQ to SQL

2009-09-16 10:38:43

LINQ查詢

2009-08-13 11:01:32

LINQPadLINQ工具

2009-09-18 09:25:06

LINQ Framew

2009-09-09 14:20:49

LINQ To Luc

2009-09-09 10:58:58

Linq結(jié)果集形狀

2009-09-09 11:14:04

Linq多個(gè)結(jié)果集

2009-09-18 13:53:09

LINQ工具集

2013-08-27 10:20:35

JavaLINQLinq4j

2009-09-09 09:36:25

Linq對(duì)象引用

2009-09-07 17:46:18

LINQ高級(jí)特性

2009-09-10 14:02:08

LINQ ASP.NE

2009-09-07 17:05:10

LINQ進(jìn)行查詢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)