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
...全文
1243 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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()

111,096

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧