十年河东,十年河西,莫欺少年穷。

本节探讨的内容很简单,就是如果使用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()的更多相关文章

  1. 计数(count)

    计数(count) 题目描述 既然是萌萌哒 visit_world 的比赛,那必然会有一道计数题啦! 考虑一个 NN个节点的二叉树,它的节点被标上了 1∼N1∼N 的编号. 并且,编号为 ii的节点在 ...

  2. PHP切割字符用到的explode 以及计数count

    在thinkphp中同样可以用 explode来进行字符的切割工作,比如 $jihe='1,2,3,4'; 在使用explode之后,可以获得一个数组: $array=explode(',',$jih ...

  3. STL_算法_元素计数(count、count_if)

    C++ Primer 学习中.. . 简单记录下我的学习过程 (代码为主) count . count_if #include<iostream> #include<cstdio&g ...

  4. Table.RowCount行列计数…Count(Power Query 之 M 语言)

    数据源: 任意五行两列 目标: 计算行数(包括空行) 操作过程: [转换]>[对行进行计数] M公式:  = Table.RowCount( 表 ) 扩展: 对表中列进行计数:= Table.C ...

  5. sqlalchemy 获取计数 count

    from sqlalchemy import func message_count = self.db.query(func.count(Message.uid)).filter(Message.ui ...

  6. 序列计数(count)

    Portal -->broken qwq Description ​​  给你一个长度为\(n\)的序列,序列中的每个数都是不超过\(m\)的正整数,求满足以下两个条件的序列数量: 1.序列中至 ...

  7. pandas.DataFrame的groupby()方法的基本使用

    pandas.DataFrame的groupby()方法是一个特别常用和有用的方法.让我们快速掌握groupby()方法的基础使用,从此数据分析又多一法宝. 首先导入package: import p ...

  8. C++ 引用计数技术及智能指针的简单实现

    一直以来都对智能指针一知半解,看C++Primer中也讲的不够清晰明白(大概是我功力不够吧).最近花了点时间认真看了智能指针,特地来写这篇文章. 1.智能指针是什么 简单来说,智能指针是一个类,它对普 ...

  9. [spark案例学习] 单词计数

    数据准备 数据下载:<莎士比亚全集> 我们先来看看原始数据:首先将数据加载到RDD,然后显示数据框的前15行. shakespeareDF = sqlContext.read.text(f ...

随机推荐

  1. loadrunner 技巧-模拟Run Logic中的随机Action运行

    技巧-模拟Run Logic中的随机Action运行 by:授客 QQ:1033553122   可以这样做,Run-time Settings,删除Action7,然后在其它Action比如Acti ...

  2. Kotlin入门(6)条件分支的实现

    上一篇文章介绍了字符串的相关操作,其中示例代码用到了if和for语句,表面上看,Kotlin对控制语句的处理与Java很像,可实际上,Kotlin在这方面做了不少的改进,所以本篇和下一篇文章就分别介绍 ...

  3. Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness

    简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...

  4. (网页)angularjs中的interval定时执行功能(转)

    转载博客园魔豆: 一个例子,用来显示当前实时时间,1秒钟刷新一次: <!DOCTYPE html> <html ng-app="myApp"> <he ...

  5. (网页)Uncaught ReferenceError: pageImport is not defined

    在js开发中,很多人遇到类似问题,都找不到解决方法.Uncaught ReferenceError: $ is not defined,在这里给大家提供几个解决方法. 1.出现这个错误,最可能的是引用 ...

  6. Linux下mysql5.7数据库root登录的问题

    本文最后修改时间:20180313 root默认为空密码,默认远程无法登录. mysql5.7更新了user表,网上的方法试了很多,都有点问题 #先停止MySQL服务 $ sudo service m ...

  7. Chrome_浏览器开发人员工具

    Google Chrome 浏览器开发人员工具,让网页开发变得更轻松 无论是 IE 6/7 的 Internet Explorer Developer Toolbar 或者是 IE 8 自带的 Dev ...

  8. 选择is或者as操作符而不是做强制类型转换

    无论何时,正确选择使用as运算符进行类型转换.比盲目的强制类型转换更安全,而且在运行时效率更高. 用as和is进行转换时,并不是对所有用户定义的类型都能完成,只是在运行时类型和目标类型匹配时,转换才能 ...

  9. fedora 28 重新生成 /boot/grub2/grub.cfg

    使用情景: 之前电脑安装了windows 7/ fedora 28 双系统,由于特殊原因,需要删除 windows 系统.在格式化硬盘后,我们还需要跟新 grub2 的启动条目:删除grub 启动的界 ...

  10. Nginx Linux安装与部署

    Nginx (engine x) 是一个高性能的HTTP和反向代理服务,也是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行. ...