首页 > 代码库 > 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从零开始---初体验