新聞中心
學(xué)習(xí)LINQ時(shí),經(jīng)常會(huì)遇到LINQ語(yǔ)法問(wèn)題,這里將介紹LINQ語(yǔ)法問(wèn)題的解決方法,以及介紹LINQ 是一系列語(yǔ)言延伸模塊,以型別安全的方式支持?jǐn)?shù)據(jù)查詢。

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供海港網(wǎng)站建設(shè)、海港做網(wǎng)站、海港網(wǎng)站設(shè)計(jì)、海港網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、海港企業(yè)網(wǎng)站模板建站服務(wù),10多年海港做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
程序語(yǔ)言隨著時(shí)間演進(jìn),一再沉淀經(jīng)驗(yàn)與抽象后,以簡(jiǎn)練直觀的語(yǔ)法解決具有共通特征的各式問(wèn)題。Visual Studio 2008(程序代碼名稱為 Orcas)、C# 3.0 與 VB.NET 9.0 后將支持新的語(yǔ)法 Language Integrated Query(LINQ),想一體解決多樣的資料存取。它是由 Anders Hejlsberg 所主導(dǎo)。Anders 曾打造了 Turbo Pascal、Delphi、Visual J++、C# 等叫好叫座的產(chǎn)品,單憑這位殺手應(yīng)用創(chuàng)造者的眼光,LINQ 就不可小覷。
LINQ 是一系列語(yǔ)言延伸模塊,以型別安全的方式支持?jǐn)?shù)據(jù)查詢。期待隔絕各種數(shù)據(jù)的特性,不管是各廠家數(shù)據(jù)庫(kù)的 SQL 方言,或是 XML 的 DOM、XQuery 或 XPath,抑或是對(duì)象集合的屬性存取。以共通的方式完成數(shù)據(jù)操作,如:挑選、比對(duì)、排序、匯總…等等。期待減輕程序開(kāi)發(fā)人員學(xué)習(xí)操作各種數(shù)據(jù)的負(fù)荷。
LINQ 藉由各語(yǔ)言編譯程序?qū)?nèi)嵌的 LINQ語(yǔ)法轉(zhuǎn)譯成原本的 C# 或 VB.NET 程序代碼,并呼叫相關(guān)的底層模塊以實(shí)體維護(hù)數(shù)據(jù)。***編譯成與 .NET Framework 2.0 CLR 兼容的 IL,所以 CLR 本身并未增加與 LINQ 相關(guān)的模塊,但 .NET Framework、Visual Studio 整合開(kāi)發(fā)環(huán)境和程序語(yǔ)言需要增加相關(guān)功能和語(yǔ)法。
就筆者自己的感覺(jué),LINQ 有以下的好處:
◆簡(jiǎn)化大量的細(xì)節(jié)運(yùn)作,將如何(how)取得數(shù)據(jù)換成要操作什么(what)數(shù)據(jù):這隱含存取優(yōu)化交由專家來(lái)做,如 DB 引擎優(yōu)化存取數(shù)據(jù)。
◆透過(guò)IEnumerable
◆平行運(yùn)算:若要處理大量數(shù)據(jù),程序設(shè)計(jì)師不容易撰寫(xiě) for 循環(huán)還包含平行運(yùn)算。但 LINQ 轉(zhuǎn)譯成 C# 或 VB.NET 的程序代碼時(shí),可以平行運(yùn)算的方式處理大量數(shù)據(jù)。
◆撰寫(xiě)數(shù)據(jù)對(duì)象存取的過(guò)程中,可以 IntelliSense 和強(qiáng)型別檢查:相較于以往 ADO.NET 加上 SQL 語(yǔ)法,LINQ 比 typed dataset 直觀易懂,且應(yīng)用更為廣泛。
就筆者與許多朋友聊到 LINQ 時(shí),最多的詢問(wèn)便是「未來(lái)是否不需要學(xué) SQL 了?」個(gè)人認(rèn)為,短時(shí)間不可能,LINQ 或許會(huì)減輕程序設(shè)計(jì)師對(duì) SQL 的倚賴,但 LINQ 不會(huì)取代 SQL。它們各有一片天,LINQ 是程序設(shè)計(jì)師講的數(shù)據(jù)對(duì)象語(yǔ)言,SQL 是數(shù)據(jù)庫(kù)管理師對(duì)數(shù)據(jù)庫(kù)引擎講的語(yǔ)言,LINQ 是從應(yīng)用程序處理數(shù)據(jù)的角度出發(fā),但 SQL 關(guān)乎著整體數(shù)據(jù)庫(kù)服務(wù)器有效且安全地活著的每一個(gè)細(xì)節(jié)。
而緊接的問(wèn)題通常是:「將數(shù)據(jù)以對(duì)象來(lái)包裝,透過(guò) entity 類別間接存取數(shù)據(jù),那是否會(huì)有效率問(wèn)題?」這筆者無(wú)法回答,尚待真實(shí)世界來(lái)證明。
LINQ 范例
你可以在 C# 中直接內(nèi)嵌如下的語(yǔ)法:取得在 Customer 對(duì)象集合中,每個(gè) Customer 的屬性 Country 值為 USA,按照 City 屬性由大到小排序,傳回以 CompanyName 和 City 兩個(gè)屬性的字符串值所建立的新對(duì)象之集合:
- var matchCustomers = from c in db.Customers
- where c.Country == "USA"
- orderby c.City descending
- select new { c.CompanyName, c.City };
這句 LINQ語(yǔ)法經(jīng)由 C# 編譯程序解析,傳回實(shí)做 IEnumerable
若不采用 LINQ 寫(xiě)法,上述語(yǔ)法也可以寫(xiě)成如下的方式:
- var matchCustomers = db.Customers.Where(c => c.Country == "USA").
OrderByDescending(c => c.City).Select(c => new { c.CompanyName, c.City });
哇,想我修習(xí) .NET 數(shù)年,竟不知所云???在此介紹一本入門書(shū):「Introducing Microsoft LINQ」,Microsoft Press 出版。它讓你了解以往的 C# 和 VB.NET 各版本如何漸進(jìn)地增加功能,***演變出 LINQ語(yǔ)法。
【編輯推薦】
- LINQ to SQL Table淺談
- Linq語(yǔ)句問(wèn)題的解決方法
- Ling to sql更新實(shí)體概述
- Linq實(shí)體繼承簡(jiǎn)單描述
- Linq Library概述
本文名稱:LINQ語(yǔ)法學(xué)習(xí)經(jīng)驗(yàn)
文章鏈接:http://fisionsoft.com.cn/article/cdoichg.html


咨詢
建站咨詢
