技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

什么是linq技術(shù)?

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-07-18 06:16┆點擊:

語言集成查詢 (LINQ) 是一組技術(shù)的名稱,這些技術(shù)建立在將查詢功能直接集成到 C# 語言(以及 Visual Basic 和可能的任何其他 .NET 語言)的基礎(chǔ)上。 借助于 LINQ,查詢現(xiàn)在已是高級語言構(gòu)造,就如同類、方法、事件等等。

(1)什么是linq技術(shù)?

這個是在《ASP.NET高級程序設(shè)計第四版》第一章節(jié)中講解asp.net版本中有關(guān)于該技術(shù)的起源背景,linq是asp.net 3.5 中跟AJAX一起在原來2.0版本上引入的一項新技術(shù)。

接下來是13章節(jié)中的一些知識點結(jié)合我自己的理解,其中我自己也存在兩點疑惑,如果有精通的希望能指導(dǎo)一番,哈哈,進入正題:

linq:縮寫是language integrated query 語言集成查詢,是一項操作內(nèi)存數(shù)據(jù)的技術(shù),看完一個小節(jié),感覺跟sql查詢的區(qū)別就是它可以將一些數(shù)據(jù)類對象執(zhí)行查詢過濾,返回自己請求的數(shù)據(jù),也即是說它既可以實現(xiàn)c#源代碼環(huán)境中的對象數(shù)據(jù)查詢,也可以實現(xiàn)關(guān)系數(shù)據(jù)庫數(shù)據(jù)訪問。

linq技術(shù)為我們開發(fā)人員提供了五個比較實用的數(shù)據(jù)訪問類型:

LinQ to Object:可以允許對內(nèi)存中的類對象查詢。

LinQ to DataSet:可以對內(nèi)存中的DataSet緩存數(shù)據(jù),執(zhí)行數(shù)據(jù)訪問。

LinQ to xml :針對XML數(shù)據(jù)的一種解析封裝可以實現(xiàn)傳統(tǒng)xml解析效果。

LinQ to Entity:這是目前l(fā)inq技術(shù)比較流行的一個亮點了,它提供了對關(guān)系數(shù)據(jù)庫的數(shù)據(jù)訪問,可以使得開發(fā)者不必通過編寫負責(zé)ADO.NET的數(shù)據(jù)訪問層就可以實現(xiàn)數(shù)據(jù)庫訪問,也可以兩者一起結(jié)合使。LinQ相對ADO.NET的優(yōu)勢在哪里呢?它真的有ADO.NET如此強大的數(shù)據(jù)訪問功能呢?這是我今天的第一個疑問,或許還需要后面的學(xué)習(xí)才能搞明白了。

LinQ to SQL:這個由于只限制sql server數(shù)據(jù)庫,所以目前已經(jīng)被LinQ to Entity逐漸取代。

(2)LinQ技術(shù)如何開發(fā)實現(xiàn)?

LinQ表達式:與我們查詢數(shù)據(jù)需要編寫SQL語句一樣,是使用它自然需要一個”語句“,就是linq表達式,而且同sql語句一樣也有它自己的語法規(guī)則。它也有與SQL語句中類似的一些關(guān)鍵字:select where orderby 已經(jīng)groupby在語法上面也很相似。一會兒在我自己的驗證實例中,會對這個做一個例子說明。

LinQ表達式返回值必須是一個實現(xiàn)了IEnumerable<T>的迭代對象。

對迭代對象進行枚舉時,linq執(zhí)行它的工作。

(3)關(guān)于linQ的延遲執(zhí)行:linQ表達式中關(guān)于執(zhí)行返回的過程,書中描述的延遲執(zhí)行的特點,只是說了可能根據(jù)解析類型的不同,linQ可能是一次執(zhí)行完也可以是在進行迭代的過程中逐步執(zhí)行。但是還是對這個概念很模糊,這是我的第二個疑問,還需要深入學(xué)習(xí)的時候回顧。

(4)LinQ表達式的幾大核心特點:為了更易于理解以下的部分將會以自己之后的程序驗證來舉例講解其中的特點

我先定義了數(shù)據(jù)類:

//定義數(shù)據(jù)類     public class mytestData {        public int studentid { set; get; }//list綁定GridView列表屬性不能為只讀否則報錯。        public string name { set; get; }        public int age{set;get;}         public mytestData(int id, string name, int age)         {            this.studentid = id;            this.name = name;            this.age = age;         }             }

在頁面page_load中初始化測試數(shù)據(jù),原本想了想既然是查詢對象數(shù)據(jù)集合,那就定義一個ArrayList裝載自己的定義的數(shù)據(jù)類,在編寫LinQ表達式的時候發(fā)現(xiàn)了一個問題:

自定義的數(shù)據(jù)類容器需要有查詢模式的實現(xiàn),所以也就是說LinQ是支持一部分?jǐn)?shù)據(jù)類型的查詢。。。。

什么是linq技術(shù)? 三聯(lián)

解決辦法就是采用List類型:

  List<mytestData> mydata = new List<mytestData>();

先來看一個linq表達式的簡單例子:

 protected void Page_Load(object sender, EventArgs e)         {            //定義測試驗證數(shù)據(jù)             List<mytestData> mydata = new List<mytestData>();             mydata.Add(new mytestData(1, "george", 23));             mydata.Add(new mytestData(2, "lio", 25));             mydata.Add(new mytestData(3, "kaiwen", 20));             mydata.Add(new mytestData(4, "anna", 19));             mydata.Add(new mytestData(5, "angel", 16));             mydata.Add(new mytestData(6, "geo", 27));             mydata.Add(new mytestData(7, "demo", 30));             mydata.Add(new mytestData(8, "哈哈", 22));            //1.最簡單的實現(xiàn)linq表達式             IEnumerable<mytestData> matchs;             matchs = from student in mydata  //student是查詢mydata集合中的對象的假名                      where student.age>20    //查詢過濾條件                      select student;         //查詢返回滿足過濾條件的matchs的集合            //頁面綁定數(shù)據(jù)展示             GridView1.DataSource = matchs;             GridView1.DataBind();         }

調(diào)試查看返回的匹配的數(shù)據(jù)類型:

什么是linq技術(shù)?

頁面效果:

什么是linq技術(shù)?

剛才我們對LinQ表達式應(yīng)該有了初步的認識,現(xiàn)在在結(jié)合一些例子說明linQ表達式能夠?qū)崿F(xiàn)的幾個效果: