LINQ语法学习经验

学习LINQ时,经常会遇到LINQ语法问题,这里将介绍LINQ语法问题的解决方法,以及介绍LINQ 是一系列语言延伸模块,以型别安全的方式支持数据查询。

成都创新互联专业为企业提供海港网站建设、海港做网站、海港网站设计、海港网站制作等企业网站建设、网页设计与制作、海港企业网站模板建站服务,10多年海港做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

程序语言随着时间演进,一再沉淀经验与抽象后,以简练直观的语法解决具有共通特征的各式问题。Visual Studio 2008(程序代码名称为 Orcas)、C# 3.0 与 VB.NET 9.0 后将支持新的语法 Language Integrated Query(LINQ),想一体解决多样的资料存取。它是由 Anders Hejlsberg 所主导。Anders 曾打造了 Turbo Pascal、Delphi、Visual J++、C# 等叫好叫座的产品,单凭这位杀手应用创造者的眼光,LINQ 就不可小觑。

LINQ 是一系列语言延伸模块,以型别安全的方式支持数据查询。期待隔绝各种数据的特性,不管是各厂家数据库的 SQL 方言,或是 XML 的 DOM、XQuery 或 XPath,抑或是对象集合的属性存取。以共通的方式完成数据操作,如:挑选、比对、排序、汇总…等等。期待减轻程序开发人员学习操作各种数据的负荷。

LINQ 藉由各语言编译程序将内嵌的 LINQ语法转译成原本的 C# 或 VB.NET 程序代码,并呼叫相关的底层模块以实体维护数据。***编译成与 .NET Framework 2.0 CLR 兼容的 IL,所以 CLR 本身并未增加与 LINQ 相关的模块,但 .NET Framework、Visual Studio 整合开发环境和程序语言需要增加相关功能和语法。

就笔者自己的感觉,LINQ 有以下的好处:

◆简化大量的细节运作,将如何(how)取得数据换成要操作什么(what)数据:这隐含存取优化交由专家来做,如 DB 引擎优化存取数据。

◆透过IEnumerable 一致性地存取各种数据,并在查询语法中互相整合:如 File System、操作系统的 process、Registry、对象集合、XML、DB...,所用的皆是对象,大家的属性都是数据。换句话说,数据对象化,对象数据化,存取二者的语法与语意相同。

◆平行运算:若要处理大量数据,程序设计师不容易撰写 for 循环还包含平行运算。但 LINQ 转译成 C# 或 VB.NET 的程序代码时,可以平行运算的方式处理大量数据。

◆撰写数据对象存取的过程中,可以 IntelliSense 和强型别检查:相较于以往 ADO.NET 加上 SQL 语法,LINQ 比 typed dataset 直观易懂,且应用更为广泛。

就笔者与许多朋友聊到 LINQ 时,最多的询问便是「未来是否不需要学 SQL 了?」个人认为,短时间不可能,LINQ 或许会减轻程序设计师对 SQL 的倚赖,但 LINQ 不会取代 SQL。它们各有一片天,LINQ 是程序设计师讲的数据对象语言,SQL 是数据库管理师对数据库引擎讲的语言,LINQ 是从应用程序处理数据的角度出发,但 SQL 关乎着整体数据库服务器有效且安全地活着的每一个细节。

而紧接的问题通常是:「将数据以对象来包装,透过 entity 类别间接存取数据,那是否会有效率问题?」这笔者无法回答,尚待真实世界来证明。

LINQ 范例

你可以在 C# 中直接内嵌如下的语法:取得在 Customer 对象集合中,每个 Customer 的属性 Country 值为 USA,按照 City 属性由大到小排序,传回以 CompanyName 和 City 两个属性的字符串值所建立的新对象之集合:

 
 
 
  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语法经由 C# 编译程序解析,传回实做 IEnumerable 接口的对象给 matchCustomers 变量。而在查询语法中,呼叫了 where、orderby、select 等延伸方法(Extension Methods)。并定义匿名方法(Anonymous Methods)的委派(delegate);要求 where 方法比较 Customers 集合中 Customer 对象的 Country 属性值为 USA。换句话说,自动将 c.Country == "USA" 转成 bool Pred(T item) 形式的委派。***透过 select 延伸方法搭配对象初始化表达式,回传匿名型别(Anonymous Type)对象的集合。

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

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

哇,想我修习 .NET 数年,竟不知所云!?在此介绍一本入门书:「Introducing Microsoft LINQ」,Microsoft Press 出版。它让你了解以往的 C# 和 VB.NET 各版本如何渐进地增加功能,***演变出 LINQ语法。

【编辑推荐】

  1. LINQ to SQL Table浅谈
  2. Linq语句问题的解决方法
  3. Ling to sql更新实体概述
  4. Linq实体继承简单描述
  5. Linq Library概述

网站标题:LINQ语法学习经验
本文URL:http://www.mswzjz.cn/qtweb/news49/239149.html

攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能