日期:2014-05-20  浏览次数:20696 次

LINQ 的介绍 背景,应用场合,CRUD

1.产生背景:

LINQ是(Language Integrated Query)(语言集成查询)的简写;面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题,其中两个最主要访问的数据源与数据库( database )和 XML 相关。

简单点来说,语言和数据的独立性太高了,高到从整体来看,他们就是两个基本独立的东西,这样就带来了通信的问题。LINQ就主要是解决数据不等对象而产生。有了LINQ数据和对象之间就可以有一个一一对应的关系了。

2.发展历程:

 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 的一部分正式发布

3.应用场景

LINQ to SQL适用之场景
.想使用ORM方案,而且数据库数据定义与对象模型是1:1对应关系
. 想使用ORM方案,而且对象继承结构储存在单一数据表中(单表继承)
. 想使用原始CLR类,而不是使用生成的类或需要从某个基类继承而来,或者需要实现某个接口
. 想使用LINQ来编写查询
. 想使用ORM,但需要性能非常好,可以通过存储过程和编译的查询来优化性能


LINQ to Entities主要的应用场景针对的是需要非常灵活和更复杂的映射的场景,特别是在企业应用方面,而且需要访问其他的数据库系统。在这些场景中,数据表的结构与对象模型也许差别很大,而且应用开发人员往往并不拥有生成或修改数据库数据定义的权利。


LINQ to Entities适用之场景 :
.想要开发针对微软SQL Server或其他数据库系统的应用
. 想要定义领域模型,并以之为持久层的基础
. 想要使用ORM方案,对象也许与数据库数据定义有1:1对应关系,也许结构迥异
. 想要使用支持单表继承和其他储存方案(每类一表,每具体类一表)的ORM方案
. 想使用LINQ来编写查询,并且查询可以在不同数据库系统下工作
. 想使用ORM,但需要性能非常好,可以通过存储过程和编译的查询来优化性能

4.CRUD经典编码:(Linq To Sql [CRUD操作]))

//先创建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();

 }