C#如何使用Linq的Group分组统计,且能去除某个字段重复的记录

xhliugreat 2017-04-07 05:29:41
数据表结构
引用
ID 区域ID 首次标记 人名
1 1 1 AAAAA
2 2 0 CCC
3 3 1 AAAAA
4 1 1 AAAAA
5 1 0 B
6 2 1 AAAAA
7 3 0 B
8 2 1 CCC
9 1 0 AAAAA
10 1 0 CCC


我需要的GROUP by 区域编号 分组条件统计的结果
引用
区域编号 所有统计 非首次 人名去重复且首次
1 5 3 1
2 3 1 2
3 2 1 1


名词解释:
引用
所有统计:指所有的区域编号为对应值的记录数量
非首次:指所有区域编号为对应值,且首次标记=0的记录数量
人名去重复且首次:指所有区域编号为对应值,且首次标记为1,且去掉人名重复的记录





DataTable DT=我写的方法从数据库得到一个DataTable,数据结构如上面的表
var query = from t in DT.AsEnumerable()
group t by new { t1 = t.Field<string>("区域ID") } into m
select new
{
区域编号 = m.Key.t1,
所有统计 = m.Count(),
非首次 = m.Count(t => t.Field<bool>("首次标记")==0),
人名去重复且首次 = m.Distinct(这里面的语法怎么写才能去重).Count(t => t.Field<bool>("首次标记")==0)
};


如上所述, 怎么才能得到我需要的去重统计表?
要求
1,DataTable结构不能变化,也就是说必须在C#得到的DataTable基础上进行
2,最好使用Linq
...全文
510 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
xhliugreat 2017-04-11
感谢 您的这个方法 确实是我需要的
回复
xuggzu 2017-04-07
上面写错类型: 人名去重复且首次 = new HashSet<string>(m.Where(t=>t.Field<bool>("首次标记")==1).Select(t=>t.Field<string>("人名"))).Count()
回复
xuggzu 2017-04-07
人名去重复且首次 = new HashSet<string>(m.Where(t=>t.Field<bool>("首次标记")==1).Select(t=>t.Field<bool>("人名"))).Count()
回复
相关推荐
发帖
C#
创建于2007-09-28

10.6w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2017-04-07 05:29
社区公告

让您成为最强悍的C#开发者