Linq和ORM有区别吗? 什么区别?
有区别的.
LINQ / LINQ to SQL / LINQ to
XXX
LINQ是新生事物,不过从不少文章和讨论上看来,这方面的概念也已经有点混沌不清了。因此我们经常可以看到这样的话:
*
LINQ只能将数据表与实体属性一一对应……
* LINQ开发指南:在LINQ中进行数据库字段映射……
以上两句话其实说的都是LINQ
to SQL而不是指LINQ。可能由于LINQ to SQL的上镜率最广(连MSDN上About LINQ的第一个示例就是查询数据库的),因此许多人都将LINQ
to SQL与LINQ混用,这会给初学者造成误解,认为LINQ就是LINQ to SQL,LINQ to
SQL就是LINQ——事实当然不是这样的。
LINQ是Language-Integrated Query的缩写,是C# 3.0和VB
9.0中新加入的语言特性,可以在编程时使用内置的查询语言进行基于集合的操作。这么做可以大大简化开发过程,提高开发效率。例如:
List
userList = GetUserList();
var userWithOddId = from u in userList
where
u.UserID % 2 == 1
select u;
foreach (User u in
userWithOddId)
{
Console.WriteLine(u.UserName);
}
如果没有LINQ,要筛选出ID为奇数的User对象则需要创建一个List,然后遍历整个列表,将符合特定条件的User对象放入新列表。而有了
LINQ,这部分的筛选就变得非常容易,甚至只需要一句话就能完成。如果觉得这个例子不够说明LINQ对生产力有重大贡献的话,请关注我接下来的一篇文章(暂定名为《我们为什么要拥抱LINQ》)。LINQ特指形如上面这段代码中from...where...select这样的用法,其返回值是
IQueryable。
LINQ to SQL是.NET 3.5内置的一个轻量级O/R
Mapping解决方案,可以将数据表映射为实体对象,方便开发人员对数据库的操作。可见,LINQ to SQL实只是LINQ的一个实现,提供了一个可以查询SQL
Server数据库的LINQ Provider。
LINQ Provider是LINQ
查询的执行器,标准LINQ语法支持许多的操作符,但是某个具体的LINQ实现可能只支持其中的一部分。在.NET 3.5默认提供了三种LINQ
Provider,分别是LINQ to Object(即上面的例子),LINQ to SQL以及LINQ to XML。
LINQ to
XXX表示使用LINQ针对XXX这种数据进行查询的解决方案。我们可以自定义LINQ
Provider,使用我们自定义的查询规则来处理特定数据集。目前互联网上已经可以找到数十种LINQ Provider(如LINQ to Flickr,LINQ
to NHibernate等),而已经处于beta 3阶段的ADO.NET Entity Framework,最终也会提供一个LINQ
Provider,叫做“LINQ to Entities”。
摘自:
http://www.cnblogs.com/darejoy/archive/2008/06/05/1214034.html