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

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

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

系列文章导航:

走进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


现在假设博客园程序启动的时候将数据库所有数据读入到内存中(多么荒谬啊,呵呵,仅仅是个假设),填充到上面这些对象里,那我们在内存中就有了这些集合: IList users,IList posts,IList roles,我们现在使用Linq to Objects对这些集合进行各种操作

向查询表达式传入参数

现在有一个用户输入http://yuyijq.cnblogs.com,通过UrlRewrite,这个连接将转向到http://www.cnblogs.com/blog.aspx?u=yuyijq,那现在我们的程序要干些什么呢?首先根据yuyijq读取该博主的所有帖子。那就要从IList集合里查找出UserName为”yuyijq”的所有帖子,但是显示在博客首页上的时候并不需要帖子的内容,如果把帖子内容也读取的话太耗资源了,只需要博客的标题,然后我们将这个只有标题和摘要的对象的集合绑定到一个GridView上:

var dataSource = from post in posts
              
where post.UserName == "yuyijq"
              select post.Title;
mainGridView.DataSource 
= dataSource;
mainGridView.DataBind();

一切就如此简单,我只需要告诉它我需要什么,而不需要告诉它如何去做(不需要使用foreach等遍历posts集合,然后判断其UserName是否相等)。

但是很明显,这个查询是硬编码的,我直接将”yuyijq”传递到查询中,拜延迟计算所赐,我们可以在查询表达式里使用变量了:

string userName = Request.QueryString["u"];

var dataSource 
= from post in posts
               
where post.UserName == userName
               select post.Title;
mainGridView.DataSource 
= dataSource;
mainGridView.DataBind();

也许你看到上面的代码不会觉得有什么特别,如果我将代码稍微坐下修改:

string userName = "zhzkl";

var dataSource 
= from post in posts
              
where post.UserName == userName
              select post.Title;
userName 
= "yuyijq";
mainGridView.DataSource 
= dataSource;
mainGridView.DataBind();

你觉得最终GridView上绑定的应该是yuyijq的帖子还是zhzkl的帖子?实际执行点经过下面的代码:/p>

var dataSource = from post in posts
              
where post.UserName == userName
              select post.Title;

的时候这个查询表达式并没有被执行,dataSource里装的也不是最终的结果,你可以理解为dataSource里放的是一个表达式,直到mainGridView.DataBind()的时候这个表达式才会被计算,所以上面的代码最终造成的结果是GridView上绑定的是yuyijq的帖子。

3
0
标签:linq objects

数据库热门文章

    数据库最新文章

      最新新闻

        热门新闻