LINQ以及LINQ to Object 和LINQ to Entities

LINQ的全称是Language Integrated Query,中文译成“语言集成查询”,是一种查询技术。sql

LINQ查询经过提供一种跨各类数据源和数据格式使用数据的一致模型,简化了查询过程。LINQ查询分为对内存对象的查询(LINQ to Object)、对SQL Server数据库的查询(LINQ to SQL)、以及对由ADO.NET实体框架建立的实体集进行查询(LINQ to Entities)等(LINQ to DataSet、LINQ to XML)。数据库

  LINQ to Object:继承IEnumerable或IEnumerable<T>接口,无须使用LINQ提供程序或API。全部的操做都是在内存中进行的。 编程

  LINQ to SQL:继承IQueryable或IQueryable<T>接口,在LINQ to SQL中,把关系型数据库的数据模型映射到开发人员所用的编程语言表示的对象模型。仅支持sql server 数据库缓存

  LINQ to Entities:继承IQueryable或IQueryable<T>接口,LINQ to Entities是Entity Framework的一部分而且取代LINQ to SQL做为在数据库上使用LINQ的标准机制。Entity Framework是行业领先的对象―关系映射(ORM)系统,能够和多种数据库一块儿使用,并支持各类灵活、复杂的数据模型。LINQ to Entities做为Entity Framework的一部分,它能够使用Entity Framework数据模型来执行LINQ查询。当应用程序运行时,LINQ to Entities会将对象模型中的语言集成查询转换为SQL。而后将它们发送到数据库进行执行。当数据库返回结果时,LINQ to Entities会将它们转换回开发人员所用的编程语言处理的对象。框架

  LINQ to Entities的技术原理:程序会把查询表达式先缓存到表达式树中,只有当真正获取数据的时候,才会由IQueryProvider解析表达式树,生成sql语句执行数据库查询操做  编程语言

LINQ查询表达式分为两种:ide

一.查询语法:spa

eg:var query=from b in arr where (b=>b>0) select bserver

二.查询方法:对象

eg:var query=arr.where(b=>b>0).select(b=>b)

*查询语法最终被编译成查询方法