您的位置:知识库 » 数据库

走进Linq-Linq to SQL How do I(1)

作者: 横刀天笑  来源: 博客园  发布时间: 2008-09-23 18:57  阅读: 14487 次  推荐: 2   原文链接   [收藏]  

系列文章导航:

走进Linq--Linq横空出世篇

走进Linq-辉煌的背后

走进Linq-Linq大观园

不能不说的C#特性-对象集合初始化器

不能不说的C#特性-匿名类型与隐式类型局部变量

不能不说的C#特性-扩展方法

不能不说的C#特性-匿名方法和Lambda表达式

不能不说的C#特性-迭代器(上)及一些研究过程中的副产品

不能不说的C#特性-迭代器(下),yield以及流的延迟计算

走进Linq-Linq to Objects(上)基础篇

走进Linq-Linq to Objects(下)实例篇

走进Linq-Linq to SQL感性认识篇

走进Linq-Linq to SQL How do I(1)

走进Linq-Linq to SQL How do I(2)

走进Linq-Linq to SQL How do I(3)

走进Linq-How do I(4)拾遗补零篇第一节

走进Linq-Linq to SQL源代码赏析 Table的获取过程

走进Linq-Linq to SQL源代码赏析之Provider的初始化

走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq


实际上,如果光返回一个Table,而不在上面施加任何的操作,遍历的时候是返回整个表的数据,在上一篇我还提到,为了跟踪,我们最好将dbContext.Log给显示出来。如果你添加了下面这行代码:
dbContext.Log = Console.Out;
(对于这行代码,如果你使用的是控制台程序,那么输出就会显示在命令窗口里,如果你用的是WinForm程序调试,那么输出会显示在VSoutput窗口里)

那你将会从控制台里得到下面的东东:


这就是Linq为你生成的SQL语句,是不在是比你写的还标准啊,呵呵。

当然,我们常常做的肯定不是像上面这样的全查询,我们还要附加一些条件的。

上一篇还提到过:由于Table实现了IEnumerable接口,那么所有的查询表达式都可以在这里使用了,这样你先前在Linq to Objects里学到东西现在又有了新的用途了:

比如我们可以对BlogId做筛选:

var posts = from post in dbContext.GetTable<Post>()
         
where post.BlogId == 2
         select post;
(PS:我在写Linq语法的时候,因为Linq的风格太像SQL语句了,所以一些地方比如 ==我老写成=,而&&经常写成”and”,希望大家不要烦我这样的低级错误,呵呵)

看看这次生成的SQL语句:

可以看到生成的SQL语句对blogid做了筛选,而且值得庆祝的是,Linq to SQL为我们生成的SQL语句还使用的是参数,她并不是仅仅将数值和语句组合在一起。关于使用参数而不是拼凑起来的SQL语句的好处在这里啰嗦两句,主要有两点:

这样可以有效的SQL注入攻击,这个hack手段曾经让很多网站吃尽了苦头。

使用参数可以利用Sql ServerSQL语句的缓存和预编译作用,因为使用参数的SQL语句可能多次用到,而拼凑起来的SQL语句却和特定的查询有关。

这样的筛选还不能体现出Linq的智能了,请再看这个:

var posts = from post in dbContext.GetTable<Post>()
         
where post.Title.StartsWith("y")
         select post;


面对这样的一个Linq查询,Linq to SQL居然知道将它翻译成LIKE子句,从上图倒数第二行最后中括号里面的东西可以看出,Linq to SQL还知道将传入的参数设置为y%,我不得不惊叹:太强大了。

2
0
标签:LINQ LINQ to SQL

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻