日期:2014-05-20 浏览次数:20752 次
1.产生背景:
LINQ是(Language Integrated Query)(语言集成查询)的简写;面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题,其中两个最主要访问的数据源与数据库( database )和 XML 相关。
简单点来说,语言和数据的独立性太高了,高到从整体来看,他们就是两个基本独立的东西,这样就带来了通信的问题。LINQ就主要是解决数据不等对象而产生。有了LINQ数据和对象之间就可以有一个一一对应的关系了。
1、最初由 Anders Hejlsberg 构思,最初的研究计划称为 Cω
2、2005年9月 – 第一个为 C# 2.0 开发的技术预览版在当年的 PDC(微软开发者大会)上发布
3、2005年11月 – 更新至社区预览版(C# 2.0)
4、2006年1月 – 第一个为 VB 8.0 开发的技术预览版发布
5、2007年11月19日 – LINQ作为 .NET Framework 3.5 的一部分正式发布
LINQ to SQL适用之场景
.想使用ORM方案,而且数据库数据定义与对象模型是1:1对应关系
. 想使用ORM方案,而且对象继承结构储存在单一数据表中(单表继承)
. 想使用原始CLR类,而不是使用生成的类或需要从某个基类继承而来,或者需要实现某个接口
. 想使用LINQ来编写查询
. 想使用ORM,但需要性能非常好,可以通过存储过程和编译的查询来优化性能
LINQ to Entities主要的应用场景针对的是需要非常灵活和更复杂的映射的场景,特别是在企业应用方面,而且需要访问其他的数据库系统。在这些场景中,数据表的结构与对象模型也许差别很大,而且应用开发人员往往并不拥有生成或修改数据库数据定义的权利。
LINQ to Entities适用之场景 :
.想要开发针对微软SQL Server或其他数据库系统的应用
. 想要定义领域模型,并以之为持久层的基础
. 想要使用ORM方案,对象也许与数据库数据定义有1:1对应关系,也许结构迥异
. 想要使用支持单表继承和其他储存方案(每类一表,每具体类一表)的ORM方案
. 想使用LINQ来编写查询,并且查询可以在不同数据库系统下工作
. 想使用ORM,但需要性能非常好,可以通过存储过程和编译的查询来优化性能
//先创建book表 private static void Retrive() { DataContext context = new DataContext(string.Format(@"Data Source={0}DB.sdf", AppDomain.CurrentDomain.BaseDirectory)); context.Log = Console.Out; //输出Sql的执行过程,方便跟踪调试 var result = from book in context.GetTable<Book>() // where book.Price > 50 && book.Title.Contains("C#") orderby book.Price descending select book; Console.WriteLine(result.Count()); Console.WriteLine("单价大于50元的书:"); foreach (var item in result) //在遍历的时候,才正真的去执行查询 { Console.WriteLine(item.Title); } } private static void Create() { DataContext context = new DataContext(string.Format(@"Data Source={0}DB.sdf", AppDomain.CurrentDomain.BaseDirectory)); context.Log = Console.Out; //输出Sql的执行过程,方便跟踪调试 ITable books = context.GetTable<Book>(); Book book = new Book() { Title = "C#编程", Author = "Wrox", ISBN = "1235=23-233", Price = 138 }; books.InsertOnSubmit(book); context.SubmitChanges(); Console.WriteLine(book.bId); } private static void Update() { DataContext context = new DataContext(string.Format(@"Data Source={0}DB.sdf", AppDomain.CurrentDomain.BaseDirectory)); context.Log = Console.Out; //输出Sql的执行过程,方便跟踪调试 var books = from b in context.GetTable<Book>() where b.bId == 5 select b; Book book = books.First<Book>(); book.Title = "C#编程"; context.SubmitChanges(); } private static void Delete() { DataContext context = new DataContext(string.Format(@"Data Source={0}DB.sdf", AppDomain.CurrentDomain.BaseDirectory)); context.Log = Console.Out; //输出Sql的执行过程,方便跟踪调试 Table<Book> books = context.GetTable<Book>(); var query = from b in books where b.bId == 5 select b; Book book = query.First<Book>(); books.DeleteOnSubmit(book); context.SubmitChanges(); }