偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

LINQ語法學(xué)習(xí)經(jīng)驗(yàn)

開發(fā) 后端
這里介紹LINQ語法經(jīng)由 C# 編譯程序解析,傳回實(shí)做 IEnumerable<Anonymous Type> 接口的對(duì)象給 matchCustomers 變量。而在查詢語法中,呼叫了 where、orderby、select 等延伸方法(Extension Methods)。

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

程序語言隨著時(shí)間演進(jìn),一再沉淀經(jīng)驗(yàn)與抽象后,以簡練直觀的語法解決具有共通特征的各式問題。Visual Studio 2008(程序代碼名稱為 Orcas)、C# 3.0 與 VB.NET 9.0 后將支持新的語法 Language Integrated Query(LINQ),想一體解決多樣的資料存取。它是由 Anders Hejlsberg 所主導(dǎo)。Anders 曾打造了 Turbo Pascal、Delphi、Visual J++、C# 等叫好叫座的產(chǎn)品,單憑這位殺手應(yīng)用創(chuàng)造者的眼光,LINQ 就不可小覷。

LINQ 是一系列語言延伸模塊,以型別安全的方式支持?jǐn)?shù)據(jù)查詢。期待隔絕各種數(shù)據(jù)的特性,不管是各廠家數(shù)據(jù)庫的 SQL 方言,或是 XML 的 DOM、XQuery 或 XPath,抑或是對(duì)象集合的屬性存取。以共通的方式完成數(shù)據(jù)操作,如:挑選、比對(duì)、排序、匯總…等等。期待減輕程序開發(fā)人員學(xué)習(xí)操作各種數(shù)據(jù)的負(fù)荷。

LINQ 藉由各語言編譯程序?qū)?nèi)嵌的 LINQ語法轉(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 整合開發(fā)環(huán)境和程序語言需要增加相關(guān)功能和語法。

就筆者自己的感覺,LINQ 有以下的好處:

◆簡化大量的細(xì)節(jié)運(yùn)作,將如何(how)取得數(shù)據(jù)換成要操作什么(what)數(shù)據(jù):這隱含存取優(yōu)化交由專家來做,如 DB 引擎優(yōu)化存取數(shù)據(jù)。

◆透過IEnumerable<T> 一致性地存取各種數(shù)據(jù),并在查詢語法中互相整合:如 File System、操作系統(tǒng)的 process、Registry、對(duì)象集合、XML、DB...,所用的皆是對(duì)象,大家的屬性都是數(shù)據(jù)。換句話說,數(shù)據(jù)對(duì)象化,對(duì)象數(shù)據(jù)化,存取二者的語法與語意相同。

◆平行運(yùn)算:若要處理大量數(shù)據(jù),程序設(shè)計(jì)師不容易撰寫 for 循環(huán)還包含平行運(yùn)算。但 LINQ 轉(zhuǎn)譯成 C# 或 VB.NET 的程序代碼時(shí),可以平行運(yùn)算的方式處理大量數(shù)據(jù)。

◆撰寫數(shù)據(jù)對(duì)象存取的過程中,可以 IntelliSense 和強(qiáng)型別檢查:相較于以往 ADO.NET 加上 SQL 語法,LINQ 比 typed dataset 直觀易懂,且應(yīng)用更為廣泛。

就筆者與許多朋友聊到 LINQ 時(shí),最多的詢問便是「未來是否不需要學(xué) SQL 了?」個(gè)人認(rèn)為,短時(shí)間不可能,LINQ 或許會(huì)減輕程序設(shè)計(jì)師對(duì) SQL 的倚賴,但 LINQ 不會(huì)取代 SQL。它們各有一片天,LINQ 是程序設(shè)計(jì)師講的數(shù)據(jù)對(duì)象語言,SQL 是數(shù)據(jù)庫管理師對(duì)數(shù)據(jù)庫引擎講的語言,LINQ 是從應(yīng)用程序處理數(shù)據(jù)的角度出發(fā),但 SQL 關(guān)乎著整體數(shù)據(jù)庫服務(wù)器有效且安全地活著的每一個(gè)細(xì)節(jié)。

而緊接的問題通常是:「將數(shù)據(jù)以對(duì)象來包裝,透過 entity 類別間接存取數(shù)據(jù),那是否會(huì)有效率問題?」這筆者無法回答,尚待真實(shí)世界來證明。

LINQ 范例

你可以在 C# 中直接內(nèi)嵌如下的語法:取得在 Customer 對(duì)象集合中,每個(gè) Customer 的屬性 Country 值為 USA,按照 City 屬性由大到小排序,傳回以 CompanyName 和 City 兩個(gè)屬性的字符串值所建立的新對(duì)象之集合:

  1. var matchCustomers = from c in db.Customers  
  2. where c.Country == "USA"  
  3. orderby c.City descending  
  4. select new { c.CompanyName, c.City }; 

這句 LINQ語法經(jīng)由 C# 編譯程序解析,傳回實(shí)做 IEnumerable<Anonymous Type> 接口的對(duì)象給 matchCustomers 變量。而在查詢語法中,呼叫了 where、orderby、select 等延伸方法(Extension Methods)。并定義匿名方法(Anonymous Methods)的委派(delegate);要求 where 方法比較 Customers 集合中 Customer 對(duì)象的 Country 屬性值為 USA。換句話說,自動(dòng)將 c.Country == "USA" 轉(zhuǎn)成 bool Pred<T>(T item) 形式的委派。***透過 select 延伸方法搭配對(duì)象初始化表達(dá)式,回傳匿名型別(Anonymous Type)對(duì)象的集合。

若不采用 LINQ 寫法,上述語法也可以寫成如下的方式:

  1. var matchCustomers = db.Customers.Where(c => c.Country == "USA").
    OrderByDescending(
    c => c.City).Select(c => new { c.CompanyName, c.City }); 

哇,想我修習(xí) .NET 數(shù)年,竟不知所云!?在此介紹一本入門書:「Introducing Microsoft LINQ」,Microsoft Press 出版。它讓你了解以往的 C# 和 VB.NET 各版本如何漸進(jìn)地增加功能,***演變出 LINQ語法。

【編輯推薦】

  1. LINQ to SQL Table淺談
  2. Linq語句問題的解決方法
  3. Ling to sql更新實(shí)體概述
  4. Linq實(shí)體繼承簡單描述
  5. Linq Library概述
責(zé)任編輯:佚名 來源: 博客園
相關(guān)推薦

2015-07-07 10:43:59

Swift語法基礎(chǔ)

2015-07-07 10:58:29

Swift語法高級(jí)

2010-05-27 17:56:39

MySQL存儲(chǔ)過程

2011-08-05 14:16:47

Objective-C 變量 方法

2011-08-18 15:19:28

XcodeObjective-C語法

2009-09-07 17:09:45

Linq To Sql

2009-09-08 15:27:08

Linq Select

2009-09-10 17:38:04

LINQ技術(shù)

2009-09-11 12:08:09

Linq to SQL

2009-09-16 17:13:54

學(xué)習(xí)Linq

2009-08-31 16:51:11

C# Main()方法

2009-08-27 09:27:49

C#擴(kuò)展方法

2009-09-17 08:47:00

Linq查詢

2009-08-18 12:52:33

C#枚舉類型

2009-09-09 16:53:53

LINQ查詢語法

2009-09-14 09:55:55

Linq基本語法

2009-09-14 10:20:52

LINQ查詢語法

2009-09-17 13:54:26

LINQ to XML

2009-09-11 13:29:31

LINQ查詢操作

2009-09-16 17:44:54

LINQ to SQL
點(diǎn)贊
收藏

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