LINQ支持以下的数据源
LINQ to Objects
对IEnumerable和IEnumerable<T>类型进行查询
LINQ to XML
对XML进行查询
LINQ to DataSet
LINQ to SQL
LINQ to Entities
上面三种的数据源都是数据库
LINQ,语言集成查询(Language Integrated Query)是一组用于c#和Visual Basic语言的扩展。它允许编写C#或者Visual Basic代码以查询数据库相同的方式 *** 作内存数据。
从技术角度而言,LINQ定义了大约40个查询 *** 作符,如select、from、in、where以及order by(C#中)。使用这些 *** 作符可以编写查询语句。不过,这些查询还可以基于很多类型的数据,每个数据类型都需要一个单独的LINQ类型。
经过了最近 20 年,面向对象编程技术( object-oriented (OO) programming technologies )在工业领域的应用已经进入了一个稳定的发展阶段。程序员现在都已经认同像 类(classes)、对象(objects)、方法(methods)这样的语言特性。考察现在和下一代的技术,一个新的编程技术的重大挑战开始呈现出来,即面向对象技术诞生以来并没有解决降低访问和整合信息数据( accessing and integrating information )的复杂度的问题。其中两个最主要访问的数据源与数据库(database)和XML(标准通用标记语言下的一个应用)相关。
LINQ 提供了一条更常规的途径即给.Net Framework添加一些可以应用于所有信息源( all sources of information )的具有多种用途( general-purpose )的语法查询特性( query facilities ),这是比向开发语言和运行时( runtime )添加一些关系数据( relational )特性或者类似 XML 特性( XML-specific )更好的方式。这些语法特性就叫做 .NET Language Integrated Query (LINQ) 。
你要问的是c# *** 作数据库吧一般分两类,
1是ADO.NET,原生支持Sqlserver,引入dll后可以支持mysql oracle等数据库,
2是ORM框架,常见的EF FLUENT等,以EF为例,可以使用LINQ *** 作实体类,从而进行数据库 *** 作,
然后回到你的问题,
1,出错率:
肯定是ORM的出错少,因为使用LINQ进行数据库“增删改查”,语法上的问题,编译器可以识别,而ado是要写sql语句的,sql语句是字符串类型,VS编译器是不会处理的。
如果你真正开发过较大的项目,那么你会发现纯sql是多么的讨厌,你很可能少些了一个空格,多打了一个字母,都会有问题。而且很难查到。
2,速度:
ORM的原理就是把LINQ的表达式,转换成SQL语句,然后使用ADO.NET进行数据库 *** 作, 所以理论上ORM一定比ADO慢。
但是还是要看数据结构和书写SQL语句的人的水平, 比如分页查询这种功能,一般的SQL写法可能需要1分钟来查,对Sql熟练的高手写一个存储过程,可能只需要10秒。
3,对服务器负担:
以EF为例,每一次LINQ *** 作,EF都会开、关一次连接,在较复杂的查询中,EF的开销会比较大,而ADO还是要看书写的SQL水平,
总结一下:
ORM框架会大大减少DAL层的代码工作量,并且减少书写错误率,但是效率偏低。
由于ORM框架的核心还是ADO.NET,所以绝大部分ORM都有参数可以兼容我们手写SQL语句,比如EF即可以使用LINQ,也可以手写DbCommand, 所以更建议去熟悉一种ORM框架,这样开发起来事半功倍。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)