走进Linq-Linq to SQL How do I(1)
[2] 走进Linq-Linq to SQL How do I(1)
[3] 走进Linq-Linq to SQL How do I(1)
[4] 走进Linq-Linq to SQL How do I(1)
[5] 走进Linq-Linq to SQL How do I(1)
系列文章导航:
不能不说的C#特性-迭代器(下),yield以及流的延迟计算
走进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-Linq to SQL源代码赏析 Table
走进Linq-Linq to SQL源代码赏析之Provider的初始化
走进Linq-Linq to SQL源代码赏析,通过Linq to SQL看Linq
实际上,如果光返回一个Table,而不在上面施加任何的操作,遍历的时候是返回整个表的数据,在上一篇我还提到,为了跟踪,我们最好将dbContext.Log给显示出来。如果你添加了下面这行代码:
那你将会从控制台里得到下面的东东:
这就是Linq为你生成的SQL语句,是不在是比你写的还标准啊,呵呵。
当然,我们常常做的肯定不是像上面这样的全查询,我们还要附加一些条件的。
上一篇还提到过:由于Table实现了IEnumerable接口,那么所有的查询表达式都可以在这里使用了,这样你先前在Linq to Objects里学到东西现在又有了新的用途了:
比如我们可以对BlogId做筛选:
where post.BlogId == 2
select post;
看看这次生成的SQL语句:
可以看到生成的SQL语句对blogid做了筛选,而且值得庆祝的是,Linq to SQL为我们生成的SQL语句还使用的是参数,她并不是仅仅将数值和语句组合在一起。关于使用参数而不是拼凑起来的SQL语句的好处在这里啰嗦两句,主要有两点:
这样可以有效的SQL注入攻击,这个hack手段曾经让很多网站吃尽了苦头。
使用参数可以利用Sql Server对SQL语句的缓存和预编译作用,因为使用参数的SQL语句可能多次用到,而拼凑起来的SQL语句却和特定的查询有关。
这样的筛选还不能体现出Linq的智能了,请再看这个:
where post.Title.StartsWith("y")
select post;
面对这样的一个Linq查询,Linq to SQL居然知道将它翻译成LIKE子句,从上图倒数第二行最后中括号里面的东西可以看出,Linq to SQL还知道将传入的参数设置为y%,我不得不惊叹:太强大了。