当前位置:
首页 > 网站开发 > ASP.net 4.0教程 >
-
asp.net教程之LINQ起源
任何技术都不可能凭空搭建起来,为了解决工业生产生中某个实际问题,当现有的技术已经无法很好的完成工业的要求,就会促发新技术的诞生。LINQ就是为了解决复杂的数据访问和整合而出现的一种新技术。
随着计算机和编程模型的发展,人们发现了另一个更好的编程模型,这就是现在最常用的面向对象编程模型。相比面向过程的编程模型而言,面向对象的编程模型能够更好的描述一个事务,事务能够通过面向对象中的属性、字段和方法很好的模拟实际的事务,而面向对象编程模型中的派生、继承等特性同样能够极大的提高代码的复用性,提升开发效率。
但是面向对象的编程模型同样没有解决复杂的数据库访问和数据整合,开发人员还是需要通过繁琐的手段进行数据库的访问和数据整合。在.NET 3.0框架或更早,LINQ就已经被提及,LINQ是一种能够快速对大部分数据源进行访问和数据整合的一种技术,LINQ解决了复杂的数据应用中开发人员需要面对和解决的问题。
虽然面向对象的数据库已经在几年前就被提及并且各大IT公司投入了对面向对象的数据库的研发,但是传统的关系型数据库在当今还是应用最为广泛的。关系型数据库中将数据整合和呈现成为一张张的表的形式,开发人员和数据库管理人员能够通过SQL管理工具提供的SQL语句进行数据的查询和整理。但是在开发过程中,开发人员不能够像使用SQL语句一样对数据集进行查询和处理。任何数据库中的数据都会以一种数据集的形式反馈给用户,这种数据集的形式可以反映成为数学中的集合的概念,其实在数据库早期的发展中,数据是以集合的概念呈现的,而随着数据库的发展,集合的概念依旧是数据库最基本的概念。
正式因为如此,开发人员不能够方便的是从一个集合中查询数据,这里不仅仅是一个数据库,还包括其他能够以数据库形式存在的文件,例如ACCESS、TXT等,当在开发中需要使用到多个数据库或者数据描述形式的文件时,更多的情况是将这些数据填充到数据集中并通过遍历来访问数据,这样却造成了更多的数据访问问题和麻烦。
LINQ能够很方便的进行数据的查询,使用LINQ对数据集进行查询的形式很像使用SQL语句对数据库中的表进行查询,而与之不同的是,LINQ能够面向更多的对象,这些对象包括数组、集合以及数据库,LINQ对数组的查询示例代码如下所示。
static void Main(string[] args)
{
string[] str = { "你好","今天的","天气真不错","生活很阳光"}; //创建数组
var s = from n in str select n; //编写查询字串
foreach (var n in s) //遍历查询对象
{
Console.WriteLine(n.ToString()); //输出对象值
}
Console.ReadKey(); //等待用户按键
}
上述代码对数组str进行了查询,这种方式很像SQL语句。的确LINQ的查询方式和SQL语句很像,其语法和基本内容都没有什么太大的差别,但是LINQ提供了更好的查询的解决方案。LINQ能够查询更多对象(例如上述代码中的数组)而无法使用SQL语句进行查询。另外,LINQ查询语句还能够使用WHERE等关键字进行查询,示例代码如下所示。
static void Main(string[] args)
{
string[] str = { "你好","今天的","天气真不错","生活很阳光"}; //创建数组
var s = from n in str where n.Length > 3 select n; //使用条件查询
foreach (var n in s) //遍历查询对象
{
Console.WriteLine(n.ToString()); //输出对象值
}
Console.ReadKey(); //等待用户按键
}
上述代码修改了LINQ查询语句,为LINQ查询语句增加了条件查询,该条件的意义为查询字符串长度大于3的字符串,运行后如图20-1所示。
图20-1 LINQ查询语句
从上图可以看出,能够使用类似于SQL语句的形式进行数据集的查询,很大程度上方便了开发人员对于数据库中数据的访问和整理。LINQ可以使用条件语句进行筛选,并且能够使用.NET提供的语法进行判断,这样就简化了开发人员对于数据集中的数据的筛选。有关LINQ的语句,会在后面的章节中详细的讲解。
20.1.1 LINQ起源
从传统的意义上来说,面向过程的编程模型在数据访问和整合的能力上有一定的限度。因为面向过程的编程方法不能很好的描述一个事务,必须通过不同函数之间的调用来描述一个现有的对象,而且面向过程的编程方法在代码复用性上比较低,所以当面向过程的编程语言需要对数据库进行访问时,就需要编写大量的额外代码。虽然面向过程的编程模型可以通过良好的函数引用和编码提高复用性,但是并没有解决面向过程编程模型中对数据的访问和整合的复杂度。随着计算机和编程模型的发展,人们发现了另一个更好的编程模型,这就是现在最常用的面向对象编程模型。相比面向过程的编程模型而言,面向对象的编程模型能够更好的描述一个事务,事务能够通过面向对象中的属性、字段和方法很好的模拟实际的事务,而面向对象编程模型中的派生、继承等特性同样能够极大的提高代码的复用性,提升开发效率。
但是面向对象的编程模型同样没有解决复杂的数据库访问和数据整合,开发人员还是需要通过繁琐的手段进行数据库的访问和数据整合。在.NET 3.0框架或更早,LINQ就已经被提及,LINQ是一种能够快速对大部分数据源进行访问和数据整合的一种技术,LINQ解决了复杂的数据应用中开发人员需要面对和解决的问题。
虽然面向对象的数据库已经在几年前就被提及并且各大IT公司投入了对面向对象的数据库的研发,但是传统的关系型数据库在当今还是应用最为广泛的。关系型数据库中将数据整合和呈现成为一张张的表的形式,开发人员和数据库管理人员能够通过SQL管理工具提供的SQL语句进行数据的查询和整理。但是在开发过程中,开发人员不能够像使用SQL语句一样对数据集进行查询和处理。任何数据库中的数据都会以一种数据集的形式反馈给用户,这种数据集的形式可以反映成为数学中的集合的概念,其实在数据库早期的发展中,数据是以集合的概念呈现的,而随着数据库的发展,集合的概念依旧是数据库最基本的概念。
正式因为如此,开发人员不能够方便的是从一个集合中查询数据,这里不仅仅是一个数据库,还包括其他能够以数据库形式存在的文件,例如ACCESS、TXT等,当在开发中需要使用到多个数据库或者数据描述形式的文件时,更多的情况是将这些数据填充到数据集中并通过遍历来访问数据,这样却造成了更多的数据访问问题和麻烦。
LINQ能够很方便的进行数据的查询,使用LINQ对数据集进行查询的形式很像使用SQL语句对数据库中的表进行查询,而与之不同的是,LINQ能够面向更多的对象,这些对象包括数组、集合以及数据库,LINQ对数组的查询示例代码如下所示。
static void Main(string[] args)
{
string[] str = { "你好","今天的","天气真不错","生活很阳光"}; //创建数组
var s = from n in str select n; //编写查询字串
foreach (var n in s) //遍历查询对象
{
Console.WriteLine(n.ToString()); //输出对象值
}
Console.ReadKey(); //等待用户按键
}
上述代码对数组str进行了查询,这种方式很像SQL语句。的确LINQ的查询方式和SQL语句很像,其语法和基本内容都没有什么太大的差别,但是LINQ提供了更好的查询的解决方案。LINQ能够查询更多对象(例如上述代码中的数组)而无法使用SQL语句进行查询。另外,LINQ查询语句还能够使用WHERE等关键字进行查询,示例代码如下所示。
static void Main(string[] args)
{
string[] str = { "你好","今天的","天气真不错","生活很阳光"}; //创建数组
var s = from n in str where n.Length > 3 select n; //使用条件查询
foreach (var n in s) //遍历查询对象
{
Console.WriteLine(n.ToString()); //输出对象值
}
Console.ReadKey(); //等待用户按键
}
上述代码修改了LINQ查询语句,为LINQ查询语句增加了条件查询,该条件的意义为查询字符串长度大于3的字符串,运行后如图20-1所示。
图20-1 LINQ查询语句
从上图可以看出,能够使用类似于SQL语句的形式进行数据集的查询,很大程度上方便了开发人员对于数据库中数据的访问和整理。LINQ可以使用条件语句进行筛选,并且能够使用.NET提供的语法进行判断,这样就简化了开发人员对于数据集中的数据的筛选。有关LINQ的语句,会在后面的章节中详细的讲解。
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式