如何使用 GroupBy 计数-Count()
十年河东,十年河西,莫欺少年穷。
本节探讨的内容很简单,就是如果使用GroupBy计数
提供两种方法:第一:把查询的数据,转化为泛型,然后泛型分组计数。
第二:Linq语句直接分组计数
有如下范例:
SQL如下:
create table S_cate
(
cateId int identity(1,1) primary key,
cateName varchar(20),
) create table S_info
(
Sid int identity(1,1) primary key,
cateId int FOREIGN KEY REFERENCES S_cate(cateId),
content varchar(100)
) insert into S_cate values('苹果')
insert into S_cate values('香蕉')
insert into S_cate values('橘子')
insert into S_cate values('桃子') insert into S_info values(1,'引用苹果')
insert into S_info values(1,'引用苹果')
insert into S_info values(1,'引用苹果')
insert into S_info values(1,'引用苹果') insert into S_info values(2,'引用香蕉')
insert into S_info values(2,'引用香蕉')
insert into S_info values(2,'引用香蕉') insert into S_info values(3,'引用橘子')
insert into S_info values(3,'引用橘子')
想要的结果为:

橘子:2 苹果:4 桃子:0 香蕉:3
那么用LINQ该如何实现呢?
首先新建返回的数据类型:
public class MSTS
{
public int cateId { get; set; } public string cateName { get; set; } public int count { get; set; }
}
我们采用cateId 和 cateName 联合分组:
LINQ如下:
#region 分组测试
/// <summary>
///LINQ分组示例
/// </summary>
/// <returns></returns>
public List<MSTS> GetCates()
{
using (AnbSosCustomerEntities context = new AnbSosCustomerEntities())
{
List<MSTS> Mlist = new List<MSTS>();
var S_cate = context.S_cate;
var S_info = context.S_info;
//
var Query = from Cate in S_cate
join Info in S_info on Cate.cateId equals Info.cateId into temp
from tt in temp.DefaultIfEmpty()
select new
{
cateId=Cate.cateId,
cateName = Cate.cateName,
content=tt.content
}; var data = Query.GroupBy(a => new { a.cateId, a.cateName }).Select(a => new MSTS { cateName = a.Key.cateName, cateId = a.Key.cateId, count = a.Count(C => C.content != null) });
Mlist = data.ToList();
return Mlist;
}
}
#endregion
其实上述的LINQ相信大家都能很快写出来,但是我要强调的是Count('里面的参数')
也就是这一句:

加上这句筛选,就是为了防止将桃子统计为 1
这样调试的结果为:

以上便是第一种方法!
那么第二种方法也很简单,思路是:左连接查询数据,然后把查询的结果转化为泛型,最后利用泛型分组:
在此直接上代码了:
MSTS类变更如下:
public class MSTS
{
public int cateId { get; set; } public string cateName { get; set; } public string content { get; set; }
}
LINQ查询变更如下:
#region 分组测试
/// <summary>
///LINQ分组示例
/// </summary>
/// <returns></returns>
public List<MSTS> GetCates()
{
using (AnbSosCustomerEntities context = new AnbSosCustomerEntities())
{
List<MSTS> Mlist = new List<MSTS>();
var S_cate = context.S_cate;
var S_info = context.S_info;
//
var Query = from Cate in S_cate
join Info in S_info on Cate.cateId equals Info.cateId into temp
from tt in temp.DefaultIfEmpty()
select new MSTS
{
cateId = Cate.cateId,
cateName = Cate.cateName,
content = tt.content
}; Mlist = Query.ToList();
return Mlist;
}
}
#endregion
调试实时信息如下:

从调试信息可以看出:因为桃子没被引用过,所以桃子对应的content为null
那么泛型的分组也和linq一样,都是要筛选这个字段的值
泛型分组如下:
IBase Implement = new BaseImplement();
protected void Page_Load(object sender, EventArgs e)
{
List<MSTS> ls = new List<MSTS>();
ls = Implement.GetCates();
var Gls = ls.GroupBy(a => new { a.cateId,a.cateName}).Select(g => (new { cateName = g.Key.cateName,cateId=g.Key.cateId, count = g.Count(A=>A.content!=null) }));
foreach (var item in Gls)
{
Response.Write(item.cateName + "的数量为:" + item.count + "!");
}
}
@陈卧龙的博客
如何使用 GroupBy 计数-Count()的更多相关文章
- 计数(count)
计数(count) 题目描述 既然是萌萌哒 visit_world 的比赛,那必然会有一道计数题啦! 考虑一个 NN个节点的二叉树,它的节点被标上了 1∼N1∼N 的编号. 并且,编号为 ii的节点在 ...
- PHP切割字符用到的explode 以及计数count
在thinkphp中同样可以用 explode来进行字符的切割工作,比如 $jihe='1,2,3,4'; 在使用explode之后,可以获得一个数组: $array=explode(',',$jih ...
- STL_算法_元素计数(count、count_if)
C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio&g ...
- Table.RowCount行列计数…Count(Power Query 之 M 语言)
数据源: 任意五行两列 目标: 计算行数(包括空行) 操作过程: [转换]>[对行进行计数] M公式: = Table.RowCount( 表 ) 扩展: 对表中列进行计数:= Table.C ...
- sqlalchemy 获取计数 count
from sqlalchemy import func message_count = self.db.query(func.count(Message.uid)).filter(Message.ui ...
- 序列计数(count)
Portal -->broken qwq Description 给你一个长度为\(n\)的序列,序列中的每个数都是不超过\(m\)的正整数,求满足以下两个条件的序列数量: 1.序列中至 ...
- pandas.DataFrame的groupby()方法的基本使用
pandas.DataFrame的groupby()方法是一个特别常用和有用的方法.让我们快速掌握groupby()方法的基础使用,从此数据分析又多一法宝. 首先导入package: import p ...
- C++ 引用计数技术及智能指针的简单实现
一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...
- [spark案例学习] 单词计数
数据准备 数据下载:<莎士比亚全集> 我们先来看看原始数据:首先将数据加载到RDD,然后显示数据框的前15行. shakespeareDF = sqlContext.read.text(f ...
随机推荐
- Java数据解析---JSON
一.Java数据解析分为:XML解析和JSON解析 XML解析即是对XML文件中的数据解析,而JSON解析即对规定形式的数据解析,比XML解析更加方便 JSON解析基于两种结构: 1.键值对类型 { ...
- .Net Core(完) 创建Docker镜像
使用Docker可以在操作系统上分出多个独立的区域(容器/Container),各个容器之间基本隔离,且可以有自己单独的系统配置.软件等,各个容器之间的软件基本不会互相干扰.Docker上配置好的容器 ...
- 小程序 青少儿书画 利用engineercms作为服务端
因为很多妈咪们喜欢发布自己宝宝的作品,享受哪些美好时刻,记录亲子创作过程. 为了方便妈咪们展示亲子创作,比如宝宝们画作,涂鸦,书法,作文,其他才艺,特利用engineercms作为服务端,重新设计了一 ...
- Hook技术--Activity的启动过程的拦截
1.寻找Hook点的原则 Android中主要是依靠分析系统源码类来做到的,首先我们得找到被Hook的对象,我称之为Hook点:什么样的对象比较好Hook呢?自然是容易找到的对象.什么样的对象容易找到 ...
- (后端)shiro:Wildcard string cannot be null or empty. Make sure permission strings are properly formatted.
访问某页面时,出现了这个异常: java.lang.IllegalArgumentException: Wildcard string cannot be null or empty. Make su ...
- c#权限验证
在开发过程中,需要对访问者的身份做权限验证(再filter中进行权限过滤). 在每次进入控制器方法之前进行调用:如 [ControllerAuth] [RoutePrefix("Clinic ...
- [MapReduce_add_2] MapReduce 实现年度最高气温统计
0. 说明 编写 MapReduce 程序实现年度最高气温统计 1. 气温数据分析 气温数据样例如下: ++023450FM-+000599999V0202701N015919999999N00000 ...
- 【数据结构】约瑟夫问题 C语言链表实现
1.首先,我们先来了解一下什么是约瑟夫环问题: 讲一个比较有意思的故事:约瑟夫是犹太军队的一个将军,在反抗罗马的起义中,他所率领的军队被击溃,只剩下残余的部队40余人,他们都是宁死不屈的人,所以不愿投 ...
- sql2008和sql2012混合安装后打开SQL Server 配置管理器查看出现“远程过程调用失败”0x800706be
sql2008和sql2012混合安装后打开SQL Server 配置管理器SQL Server服务出现“远程过程调用失败”0x800706be 网上很多人都说这个解决方案,通过卸载“Microsof ...
- zk理解(转载自邬兴亮---www.cnblogs.com/wuxl360/p/5817471.html)
一.分布式协调技术 在给大家介绍ZooKeeper之前先来给大家介绍一种技术——分布式协调技术.那么什么是分布式协调技术?那么我来告诉大家,其实分布式协调技术 主要用来解决分布式环境当中多个进程之间的 ...