走进Linq-Linq to Objects(下)实例篇
[1] 走进Linq-Linq to Objects(下)实例篇
[2] 走进Linq-Linq to Objects(下)实例篇
[3] 走进Linq-Linq to Objects(下)实例篇
[4] 走进Linq-Linq to Objects(下)实例篇
[5] 走进Linq-Linq to Objects(下)实例篇
[6] 走进Linq-Linq to Objects(下)实例篇
[2] 走进Linq-Linq to Objects(下)实例篇
[3] 走进Linq-Linq to Objects(下)实例篇
[4] 走进Linq-Linq to Objects(下)实例篇
[5] 走进Linq-Linq to Objects(下)实例篇
[6] 走进Linq-Linq to Objects(下)实例篇
系列文章导航:
不能不说的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
分组
在上一篇中GroupBy对应的查询表达式也非常麻烦,下面就来瞧瞧。我们要对博客园上所有文章做个分组,分组依据就根据博客的用户名好了:
var dataSource = from post in posts
group post.Title by post.UserName;
group post.Title by post.UserName;
可我们要是想根据博客的用户名和博客的分类进行分组怎么办?
var dataSource = from post in posts
group post.Title by post.UserName,post.CategoryId;
group post.Title by post.UserName,post.CategoryId;
这样是行不通的,编译都不通过,像下面这样就可以了:
var dataSource = from post in posts
group post.Title by new { post.UserName, post.CategoryId };
group post.Title by new { post.UserName, post.CategoryId };
用一个匿名类型进行group(当然,你使用一个具名类型也是可以的);
{
//在遍历这个dataSource的时候,item有一个属性Key,这个Key就代表by后面的东西
}
如果像上面那样,这个查询表达式就要到这里终止了,还有这样一种方式:
var dataSource = from post in posts
group post by post.UserName into grouping
select new {
Key = grouping.Key,
Value = grouping
};
group post by post.UserName into grouping
select new {
Key = grouping.Key,
Value = grouping
};
nto子句又引入了一个变量,这个变量可以在后面的select子句里使用,在select子句里我们可以访问grouping的Key,并可以对grouping进行一些统计,比如Sum啊:
var dataSource = from post in posts
group post by post.UserName into grouping
select new {
Key = grouping.Key,
TotalClick = grouping.Sum(post=>post.Click)
};
group post by post.UserName into grouping
select new {
Key = grouping.Key,
TotalClick = grouping.Sum(post=>post.Click)
};
这个TotalClick就可以统计出每个博客的所有点击数了。