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

系列文章导航:

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


理论部分也聊了好几篇了,从今天开始我们就来进行一些实例,看到代码才心安点,呵呵。这个例子将贯穿本系列的后续所有篇章。

以博客园为例建模:

博客园里每个用户有且仅有一个博客,为了简单每篇博客只能属于一个分类,每个用户有一个角色

下面是代码

public class User
{
/**//// <summary>
/// 用户编号
/// </summary>
public int UserId { get; set; }
/**//// <summary>
/// 博客园Id
/// </summary>
public string UserName { get; set; }
/**//// <summary>
/// 密码
/// </summary>
public string Password { get; set; }
/**//// <summary>
/// 博客名称
/// </summary>
public string BlogName { get; set; }
/**//// <summary>
/// 角色
/// </summary>
public Role Role { get; set; }
}

系列文章导航:

走进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();

系列文章导航:

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


非泛型集合的查询

虽然今天C#已经发展到了3.0,但是在2.0里出现的泛型并没有得到全面的普及,很多开发者还是在程序里大量使用1.x里出现的一些非泛型集合,比如ArrayList就是个代表,那么如果存在这样一个集合我们怎么去查询:

ArrayList posts = dataBase.GetAllPosts();

系列文章导航:

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


排序

在数据驱动的应用中我们经常需要对数据根据一些属性进行排序,而通常这些排序的属性应该是用户可以自己设置的,比如博客,可以根据点击率排序,也可以根据评论排序,甚至两者都作为排序根据。还有什么顺序啊,倒序啊,也就是这个排序是个动态的。那我们是不是要写一大串if…else…进行判断,然后写不同的Linq表达式:

if(根据点击率排序){
    
return from post in posts
        
where post.Title ==”yuyijq”
              orderby post.Click
            select post;
}
else if(…){

}

系列文章导航:

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


分组

在上一篇中GroupBy对应的查询表达式也非常麻烦,下面就来瞧瞧。我们要对博客园上所有文章做个分组,分组依据就根据博客的用户名好了:

var dataSource = from post in posts
          group post.Title by post.UserName;

系列文章导航:

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


联结

Join也是个蛮复杂的表达式

如果给你一个UserId,你要根据UserId从users集合里先找出UserName,然后根据UserName找出所有下面的Post:

var dataSource = from post in posts
             join user 
in users on post.UserName equals user.UserName
             
where user.UserId = 2
             select post;

it知识库走进Linq-Linq to Objects(下)实例篇,转载需保留来源!

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。