如何使用 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 ...
随机推荐
- 生产者与消费者+Queue(线程安全)
from queue import Queue from lxml import etree import requests from urllib import request from threa ...
- mybatis学习系列二
1 参数处理(封装map过程)(23) 1.1)F5进入断点:Employee employee1=mapper.selectEmployeeByMap(map); 1.2)进入MapperProxy ...
- XP环境下C# 调用Pocess.start()时提示文件找不到的错误解决办法
错误提示如下: System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件. 在 System.Diagnostics.Process. ...
- [20180626]函数与标量子查询14.txt
[20180626]函数与标量子查询14.txt --//前面看http://www.cnblogs.com/kerrycode/p/9099507.html链接,里面提到: 通俗来将,当使用标量子查 ...
- javascript避免dom事件重复触发
/** * 为指定控件添加限制性事件, 该事件在触发之后, 会被移除, 并在指定的时间间隔后, 重新绑定, 适用于避免控件事件被误操作重复触发的场景 * @param {String} domID 要 ...
- VMware虚拟机中CentOS 7的硬盘空间扩容
查看centos7系统挂载点信息 扩展VMWare-centos7硬盘空间 对新增加的硬盘进行分区.格式化 添加新LVM到已有的LVM组,实现扩容 1.查看centos7系统挂载点信息 df -h查看 ...
- Ubuntu 12.10 Tty (字符终端) 显示中文,和字体大小设置
Tty通过修改默认的中文编码字符,和安装zhcon都无法显示中文.可安装fbterm来显示中文,命令:sudo apt-get install fbterm安装即可,进入Tty: (Ctrl+Alt+ ...
- 3星|《创投42章经》:前VC投资人的商业评论文集
创投42章经:互联网商业逻辑与投资进阶指南 作者2014年入行VC做投资人,2016年退出改作自媒体.书中主要是作者的各类商业评论的文集,少部分是跟投资相关的内容. 投资相关的内容,有些作者自己的视角 ...
- Deepin中设置文件或文件夹权限
Deepin中设置文件或文件夹权限 -R 递归进行某项操作,不论是删除文件夹或者修改文件夹下所有文件权限 权限更改,777相当于完全控制权限: 更改一个文件夹或文件的权限:chmod 777 文件 ...
- [java大数据面试] 2018年4月百度面试经过+三面算法题:给定一个数组,求和为定值的所有组合.
给定一个数组,求和为定值的所有组合, 这道算法题在leetcode应该算是中等偏下难度, 对三到五年工作经验主要做业务开发的同学来说, 一般较难的也就是这种程度了. 简述经过: 不算hr面,总计四面, ...