LINQ(Language Integrated Query)(1):簡介

來源:互聯網
上載者:User

C# 2.0最大的改進是泛型.C# 3.0最大的改進就是Linq(Language-integrated Query (LINQ)).Linq又細分三大塊:Linq to XML,Linq to ADO.NET(Linq to SQL,Linq to DataSet,Linq to Entity),Linq to Object.

關於Linq的爭議

有些人對Linq to ADO.NET可能有很多異議.覺得它是對ADO.NET再封裝一次,效能降低了 .而且ADO.NET用著也挺好的.幹嘛那麼麻煩再學個新技術Linq.其實程式設計語言中新增加的一些特性往往是為了更方便開發人員,提高開發效率,降低你犯錯誤的可能性.當然同時得也得考慮效能方面的事了.但是現在電腦硬體設定越來越好.以前的記憶體才那麼幾百M,現在動不動就幾G,CPU效能也越來越好.所以有時別太為電腦去考慮.多為程式員考慮下.怎麼少寫點代碼實現更多的功能.至於那些簡單的代碼後面再要執行啥複雜的操作也不用考慮太多.像Managed 程式碼不就是替你做了很多事,比如不用去考慮啥記憶體泄露這樣的煩心事了嘛.中間多了個CLR效能自然下降了.但你寫起代碼來多省事了啊.

當然了如果你覺得Linq效能不好也可以完全不用,它實現的功能採取其他方法也照樣能實現.只不過多寫些代碼罷了.

簡單例子

先舉幾個關於Linq to Object簡單例子來大概介紹下Linq的文法.看具體怎麼用.

string[] names = { "arwen", "james", "sunny", "lily", "ada" };

 var name   = from na
in names

                      select na;

            foreach (var str in name)

            {

                string s = str;

                Console.WriteLine(s);

            }

分析:

首先說下關鍵字var,它是用來做類型推斷,也就是說它可以用來代替string,int等所有關鍵字來定義一個類型.然後編譯器可編譯時間可以通過變數的值推斷出變數類型.

其實在這裡你也可以用IEnumerable<string> name 來代替var name這樣定義變數.

然後就是from,select這樣的關鍵字了.看起來很像SQL語句的文法吧.Linq的設計應該就是參照了SQL的思想吧.sql語句就是封裝了很多細節,只告訴電腦去做什麼,而不用告訴他具體怎麼做.而我們平時用C#,Jave,C++這些語言都不僅要告訴電腦去做什麼,還要怎麼做.把具體的每一步用代碼寫出來.以上面的例子來說.如果我們要擷取數組中以a開頭的元素.如果沒用Linq你必須這樣寫代碼去判斷

List<string>  list = new List<string>();

foreach(string s in names)

{

     if(s.StartWith("a")

    list.Add(s);

}

就是說要自己指定電腦去具體怎麼做.但如果用Linq的話就直接用下面的語句

var name =   from na in names

                       where na.StartsWith("a")

                       select na;

用一個where去告訴電腦做什麼就行.具體怎麼做就不用管了.

所以Linq的真正的意義不僅是使你的一些操作更簡單,而且引進了SQL語句那種思想.盡量封裝一些具體操作細節,把注意力放在軟體要實現的功能方面.當然SQL語句應用範圍也是有限,只能針對錶的一些簡單操作,更複雜的操作還需要一些擴充,比如SQL Server有T-SQL,Oracle有PL/SQL,面對一些複雜的操作它們還得寫很多代碼去告訴電腦具體怎麼做.

Linq也同樣有局限的.查詢語言,顧名思議只能查詢資料.所以我們只能從數組names中擷取資料,而不能通過Linq去修飾裡面的資料.

Linq很多用法跟SQL類似,所以可以參照SQL那些關鍵字用法學下.當然Linq還有其他一些更複雜的操作.再舉個簡單例子說下把獲得的資料排序

string[] names = { "arwen", "james", "sunny", "lily", "ada" };

var name = from na in names

orderby na descending      

select na;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.