首页 > 代码库 > LinQ从零开始---初体验

LinQ从零开始---初体验

LinQ从零开始---初体验

 

         LinQ是什么?

         LINQ,语言集成查询(LanguageIntegrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式操作内存数据。

 

         LinQ要解决什么问题?

         面向对象与数据访问两个领域长期分裂,各自为政, 编程语言中的数据类型与数据库中的数据类型形成两套体系。

  • C# 中字符串用 string 表示
  • SQL 中字符串用 NVarchar/Varchar/Char 表示

         SQL 编码体验落后

  • 没有智能感应
  • 没有严格意义上的强类型和类型检查

         SQL 和XML 都有各自的查询语言,而对象没有自己的查询语言

 

         LinQ的组成

        

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

         1.LINQ to Objects

         主要负责对象的查询(是指直接对任意IEnumerable集合使用LINQ查询,无需使用中间LINQ程序或API。LINQ To Object 提供的是内存中集合数据的实体映射.

         2.LINQ to XML

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

         3.LINQ toADO.NET 

         主要负责数据库的查询

         1)LINQ to SQL

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

         2)LINQ to DataSet

LINQ to DataSet将LINQ和ADO.NET集成,它通过ADO.NET获取数据,然后通过LINQ进行数据查询,从而实现对数据集进行非常复杂查询。

         3)LINQ to Entities

         它让你可以使用标准的 C#对象与数据库的结构和数据打交道。使用 LINQ to Entities 时,LINQ 查询在后台转换为 SQL 查询并在需要数据的时候执行,即开始枚举结果的时候执行。LINQ to Entities 还为你获取的所有数据提供变化追踪,也就是说,可以修改查询获得的对象,然后整批同时把更新提交到数据库。

       LINQ to Entities 是 Entity Framework 的一部分并且取代 LINQ to SQL 作为在数据库上使用 LINQ 的标准机制。Entity Framework 是行业领先的对象-关系映射(ORM)系统。可以和多种数据库一起使用,并支持各种灵活、复杂的数据模型。

 

         说了这么多,我们还是用一个简单的实例说明一下微软LINQ to SQL框架为我们带来的体验。

 

         LinQ实例

         我们从一个数组中选出自己需要的数据,看看用普通方法和使用LinQ有什么区别。

         不使用LinQ:

            int[] arr = { 123, 2, 22, 23, 15, 6, 8, 67, 887, 999 };

            //获取大于50的数
            //没有Linq我们怎么做、
            ArrayList result = new ArrayList();
            for (int i = 0; i < arr.Length; i++)
            {
                if (arr[i] > 50)
                {
                    result.Add(arr[i]);
                }
            }
            //打印result
            for (int i = 0; i < result.Count; i++)
            {
                Console.WriteLine(result[i]);
            }

         输出结果:


 

           使用LinQ:

            //获取大于50的数
            IEnumerable ie = arr.Select(p => p).Where(p => p > 50);
            //输出-----该部分可以重复
            IEnumerator result = ie.GetEnumerator();
            while (result.MoveNext())
            {
                Console.WriteLine(result.Current);
            }

           输出结果:

           分析:

           从上面的实例中我们可以发现相对于不使用LinQ,使用LinQ代码更加简洁;同时无需复杂学习过程即可上手。

           关于LinQ的其他优点,更快开发错误更少的应用程序。无需求助奇怪的编程技巧就可合并数据源。能够大幅减少过程控制语句的代码块,使代码的可读性和可维护性大幅提高。任何对象或数据源都可以定制实现LinQ适配器,为数据交互带来真正方便。还有待我们探究!


文章中实例源码:http://pan.baidu.com/s/1AQaV8
  
   

 

LinQ从零开始---初体验