LINQ是Language Integrated Query的简称,它是集成在.NET编程语言中的一种特性。已成为编程语言的一个组成部分,在编写程序时可以得到很好的编译时语法检查,丰富的元数据,智能感知、静态类型等强类型语言的好处。并且它同时还使得查询可以方便地对内存中的信息进行查询而不仅仅只是外部数据源。

LINQ定义了一组标准查询操作符用于在所有基于.NET平台的编程语言中更加直接地声明跨越、过滤和投射操作的统一方式,标准查询操作符允许查询作用于所有基于IEnumerable<T>接口的源,并且它还允许适合于目标域或技术的第三方特定域操作符来扩大标准查询操作符集,更重要的是,第三方操作符可以用它们自己的提供附加服务的实现来自由地替换标准查询操作符,根据LINQ模式的习俗,这些查询喜欢采用与标准查询操作符相同的语言集成和工具支持。

我们来总体看看LINQ架构

在.NET3.5下,微软为我们提供了一些命名空间

LINQ包括五个部分:LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML。

LINQ to SQL全称基于关系数据的.NET语言集成查询,用于以对象形式管理关系数据,并提供了丰富的查询功能。其建立于公共语言类型系统中的基于SQL的模式定义的集成之上,当保持关系型模型表达能力和对底层存储的直接查询评测的性能时,这个集成在关系型数据之上提供强类型。

LINQ to XML在System.Xml.LINQ命名空间下实现对XML的操作。采用高效、易用、内存中的XML工具在宿主编程语言中提供XPath/XQuery功能等。

说了这么多,我们还是用一个简单的实例说明一下LINQ带来的体验。

第一步:建立dbml(Database Mark Language。数据库描述语言,是一种xml格式的文档,用来描述数据库)文件,以Northwind数据库为例,上述Customers类被映射成一个表,对应数据库中的 Customers表

第二步:创建一个ASP.NET页面,在页面上加入一个GridView控件

第三步:编写代码进行数据绑定

第四步:运行显示结果。

好了,就说这么多吧,大家应该对LINQ有了总体的了解。最后我对LINQ还有一点疑惑,在此提出,请熟悉的朋友来探讨:

  1. LINQ是在ADO.NET之上的,那么在将来它会代替ADO.NET吗?
  2. 在大型项目中使用LINQ,它的效率如何呢?

接下来,我们开始从LINQ to SQL语句入手,来全面了解一下LINQ,就从最简单的Where说起吧,这个在编写程序中也最为常用。

Where操作

适用场景:实现过滤,查询等功能。

说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句。

Where操作包括3种形式,分别为简单形式、关系条件形式、First()形式。下面分别用实例举例下:

1.简单形式:

例如:使用where筛选在伦敦的客户

  1. var q =
  2.     from c in db.Customers
  3.     where c.City == "London"
  4.     select c;

再如:筛选1994 年或之后雇用的雇员:

  1. var q =
  2.     from e in db.Employees
  3.     where e.HireDate >= new DateTime(1994, 1, 1)
  4.     select e;

2.关系条件形式:

筛选库存量在订货点水平之下但未断货的产品:

  1. var q =
  2.     from p in db.Products
  3.     where p.UnitsInStock <= p.ReorderLevel && !p.Discontinued
  4.     select p;

筛选出UnitPrice 大于10 或已停产的产品:

  1. var q =
  2.     from p in db.Products
  3.     where p.UnitPrice > 10m || p.Discontinued
  4.     select p;

下面这个例子是调用两次where以筛选出UnitPrice大于10且已停产的产品。

  1. var q =
  2.     db.Products.Where(p=>p.UnitPrice > 10m).Where(p=>p.Discontinued);

3.First()形式:

返回集合中的一个元素,其实质就是在SQL语句中加TOP (1)。

简单用法:选择表中的第一个发货方。

  1. Shipper shipper = db.Shippers.First();

元素:选择CustomerID 为“BONAP”的单个客户

  1. Customer cust = db.Customers.First(c => c.CustomerID == "BONAP");

条件:选择运费大于 10.00 的订单:

  1. Order ord = db.Orders.First(o => o.Freight > 10.00M);
  1.  

LINQ推荐资源

LINQ专题:http://kb.cnblogs.com/zt/linq/ 关于LINQ方方面面的入门、进阶、深入的文章。
LINQ小组:http://space.cnblogs.com/group/linq/ 学习中遇到什么问题或者疑问提问的好地方。

本资源由http://www.cnblogs.com/lyj/archive/2008/01/20/1046196.html提供,其中有一系列的专题文章。

  1.  

LINQ简介和LINQ to SQL语句之Where的更多相关文章

  1. 在linq查询环境下通过sql语句来访问数据库

    接上一篇随笔 这里主要介绍在linq环境下,如果实现用sql来访问数据库,同时也介绍在EF框架中如何添加新的方法来访问数据库. 1.首先,在数据访问层(EF.DAO,EF.IDAO)中添加具体的函数来 ...

  2. Linq模型ObjectContext下查看Sql语句。

    ObjectContext 并没有提供 LINQ to SQL DataContext.Log 这样的功能,要查看实际生成的 T-SQL 语句,要么借助 SQL Server Sql Profiler ...

  3. 深入理解 LINQ to SQL 生成的 SQL 语句

    Ø  简介 在 C# 中与数据交互最常用的语句就是 LINQ 了,而 LINQ to SQL 是最直接与数据库打交道的语句,它可以根据 LINQ 语法生成对应的 SQL 语句,在数据库中去执行.本文主 ...

  4. LINQ to SQL语句

    http://kb.cnblogs.com/page/42477/2/ 本系列文章导航 LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct ...

  5. LINQ to SQL语句对应SQL的实现

    LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg LINQ ...

  6. IT咨询顾问:一次吐血的项目救火 java或判断优化小技巧 asp.net core Session的测试使用心得 【.NET架构】BIM软件架构02:Web管控平台后台架构 NetCore入门篇:(十一)NetCore项目读取配置文件appsettings.json 使用LINQ生成Where的SQL语句 js_jquery_创建cookie有效期问题_时区问题

    IT咨询顾问:一次吐血的项目救火   年后的一个合作公司上线了一个子业务系统,对接公司内部的单点系统.我收到该公司的技术咨询:项目启动后没有规律的突然无法登录了,重新启动后,登录一断时间后又无法重新登 ...

  7. LINQ to SQL语句(7)之Exists/In/Any/All/Contains

    适用场景:用于判断集合中元素,进一步缩小范围. Any 说明:用于判断集合中是否有元素满足某一条件:不延迟.(若条件为空,则集合只要不为空就返回True,否则为False).有2种形式,分别为简单形式 ...

  8. 年终巨献 史上最全 ——LINQ to SQL语句

    LINQ to SQL语句(1)之Where 适用场景:实现过滤,查询等功能. 说明:与SQL命令中的Where作用相似,都是起到范围限定也就是过滤作用的,而判断条件就是它后面所接的子句.Where操 ...

  9. LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

    它基于由 ADO.NET 提供程序模型提供的服务.因此,我们可以将 LINQ to SQL 代码与现有的 ADO.Net 应用程序混合在一起,将当前 ADO.NET 解决方案迁移到 LINQ to S ...

随机推荐

  1. Nutch 2.2+MySQL+Solr4.2实现网站内容的抓取和索引

    原文地址: http://blog.sina.com.cn/s/blog_3c9872d00101p4f0.html Nutch 2.2.1发布快两月了,该版本与Nutch之前版本相比,有较大变化,特 ...

  2. How do I place a group of functions or variables in a specific section?

    http://supp.iar.com/Support/?Note=27498 EWARM v5.xx (and newer) The placement of a few functions in ...

  3. Cortex-M3 Context Switching

    http://www.embedded.com/design/embedded/4231326/Taking-advantage-of-the-Cortex-M3-s-pre-emptive-cont ...

  4. 解决ArcGIS Android Could not find class 'com.esri.android.map.MapView'问题

    环境win7 64bit sp1,eclipse 4.2.1 ,android API 16,ADT 23.0.2,arcgis android sdk 10.2.4 从arcgis-android- ...

  5. FluentData官方文档翻译

    开始 要求 .NET 4.0. 支持的数据库 MS SQL Server using the native .NET driver. MS SQL Azure using the native .NE ...

  6. javascript计算字符串的字节长度

    String.prototype.byteLen = function(){ var len = 0, i = this.length; while(i--) { len += (this.charC ...

  7. 多个非同源的shared_ptr管理对象引起double free

    有多个不同源的shared_ptr管理对象时会出现多次释放对象,这里不同源是指多组间不是通过拷贝构造.复制等手段而来的,即几组shared_ptr是独立声明的. #include<iostrea ...

  8. Sqlserver事务发布实现数据同步

    事务的功能在sqlserver中由来已久,因为最近在做一个数据同步方案,所以有机会再次研究一下它以及快照等,发现还是有很多不错的功能和改进的.这 里以sqlserver2008的事务发布功能为例,对发 ...

  9. QoS 测量 (目标,方法,协议)

    本文翻译自ITU-T的Technical Paper:<How to increase QoS/QoE of IP-based platform(s) to regionally agreed ...

  10. IOS网络编程——第三方类库

    IOS网络编程——第三方类库 目录 概述 ASIHttpRequest AFNetworking 其他 概述 ASIHttpRequest AFNetworking 其他