博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何使用 GroupBy 计数-Count()
阅读量:6366 次
发布时间:2019-06-23

本文共 4104 字,大约阅读时间需要 13 分钟。

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

本节探讨的内容很简单,就是如果使用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,'引用橘子')
View Code

想要的结果为:

橘子: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 分组测试        ///         ///LINQ分组示例        ///         /// 
public List
GetCates() { using (AnbSosCustomerEntities context = new AnbSosCustomerEntities()) { List
Mlist = new List
(); 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 分组测试        ///         ///LINQ分组示例        ///         /// 
public List
GetCates() { using (AnbSosCustomerEntities context = new AnbSosCustomerEntities()) { List
Mlist = new List
(); 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
ls = new List
(); 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 + "!"); } }

@陈卧龙的博客

转载地址:http://laema.baihongyu.com/

你可能感兴趣的文章
php中怎么导入自己写的类
查看>>
C# 委托
查看>>
Using Information Fragments to Answer the Questions Developers Ask
查看>>
JVM学习(4)——全面总结Java的GC算法和回收机制---转载自http://www.cnblogs.com/kubixuesheng/p/5208647.html...
查看>>
getParameter和getAttribute的区别
查看>>
自动工作负载库理论与操作(Automatic Workload Repository,AWR)
查看>>
Redis两种方式实现限流
查看>>
CentOS 7 中使用NTP进行时间同步
查看>>
在MongoDB数据库中查询数据(上)
查看>>
Python import其他文件夹的文件
查看>>
Jvm(22),回收策略-----标记清除算法
查看>>
MySQL多表关联查询效率高点还是多次单表查询效率高,为什么?
查看>>
UNIX 高手的 10 个习惯
查看>>
传值与传引用
查看>>
HDU 1538 A Puzzle for Pirates(海盗分金问题)
查看>>
C# Web Forms - Using jQuery FullCalendar
查看>>
H5移动端知识点总结
查看>>
Sublime-Text-2-pydocstring --- 自动生成python docstring的插件
查看>>
UNIX进程环境
查看>>
学习面试题Day03
查看>>