C#用DataTable实现Group by数据统计

http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html

 

 

1、用两层循环计算,前提条件是数据已经按分组的列排好序的。

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("name"typeof(string)),
                                        new DataColumn("sex"typeof(string)),
                                        new DataColumn("score"typeof(int)) });
dt.Rows.Add(new object[] { "张三","男",1 });
dt.Rows.Add(new object[] { "张三","男",4 });
dt.Rows.Add(new object[] { "李四","男",100 });
dt.Rows.Add(new object[] { "李四","女",90 });
dt.Rows.Add(new object[] { "王五","女",77 });
DataTable dtResult = dt.Clone();
for (int i = 0; i < dt.Rows.Count; )
{
    DataRow dr = dtResult.NewRow();
    string name = dt.Rows[i]["name"].ToString();
    string sex = dt.Rows[i]["sex"].ToString();
    dr["name"] = name;
    dr["sex"] = sex;
    int score = 0;
    //内层也是循环同一个表,当遇到不同的name时跳出内层循环
    for (; i < dt.Rows.Count; )
    {
        if (name == dt.Rows[i]["name"].ToString()&&name == dt.Rows[i]["sex"].ToString())
        {
            score += Convert.ToInt32(dt.Rows[i]["score"]);
            dr["score"] = score;
            i++;
        }
        else
        {
            break;
        }
    }
    dtResult.Rows.Add(dr);

}

dtResult中的数据即是最终结果。 

2、 借助DataTable的Compute方法,DataTable中数据不用事先排好序。

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[] { new DataColumn("name", typeof(string)),                                          new DataColumn("sex", typeof(string)),                                          new DataColumn("score", typeof(int)) }); dt.Rows.Add(new object[] { "张三","男",1 }); dt.Rows.Add(new object[] { "张三","男",4 }); dt.Rows.Add(new object[] { "李四","男",100 }); dt.Rows.Add(new object[] { "李四","女",90 }); dt.Rows.Add(new object[] { "王五","女",77 }); DataTable dtResult = dt.Clone(); DataTable dtName = dt.DefaultView.ToTable(true, "name","sex"); for (int i = 0; i < dtName.Rows.Count; i++) {     DataRow[] rows = dt.Select("name='" + dtName.Rows[i][0] + "' and sex='" + dtName.Rows[i][1] + "'");     //temp用来存储筛选出来的数据     DataTable temp = dtResult.Clone();     foreach (DataRow row in rows)     {         temp.Rows.Add(row.ItemArray);     }     DataRow dr = dtResult.NewRow();     dr[0] = dtName.Rows[i][0].ToString();     dr[1] = temp.Compute("sum(score)", "");     dtResult.Rows.Add(dr); }  3、使用linq to DataTable group by实现 var query = from t in dt.AsEnumerable()             group t by new { t1 = t.Field<string>("name"), t2 = t.Field<string>("sex") } into m             select new             {                 name = m.Key.t1,                 sex = m.Key.t2,                 score = m.Sum(n => n.Field<decimal>("score"))             }; if (query.ToList().Count > 0) {     query.ToList().ForEach(q =>     {         Console.WriteLine(q.name + "," + q.sex + "," + q.score);     }); }

转载于:https://www.cnblogs.com/LuoEast/p/7691989.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CI框架取消index.php

首先看文档&#xff1a; http://codeigniter.org.cn/user_guide/general/urls.html#url-index-php 大致意思是&#xff0c;先Apache开启rewrite&#xff0c;再index.php同级目录下创建一个.htaccess文件 设置好后还是不起作用&#xff01;&#xff01;&#xff01;&#xff01;…

电子工程师自学成才pdf_给新开发人员的最佳建议:自学成才的软件工程师的建议...

电子工程师自学成才pdfby Ali Spittel通过Ali Spittel 给新开发人员的最佳建议&#xff1a;自学成才的软件工程师的建议 (My best tips for new developers: advice from a (mostly) self-taught software engineer) The most common question I get from blog readers is “W…

leetcode1090. 受标签影响的最大值(贪心算法)

我们有一个项的集合&#xff0c;其中第 i 项的值为 values[i]&#xff0c;标签为 labels[i]。 我们从这些项中选出一个子集 S&#xff0c;这样一来&#xff1a; |S| < num_wanted 对于任意的标签 L&#xff0c;子集 S 中标签为 L 的项的数目总满足 < use_limit。 返回子…

html显示hdf5文件,python读取hdf5文件

python怎样读取hdf5文件python 中h5py读文件,提示错误File "h5py\_objects完整代码和完整错误信息的图片。Windows环境下给Python安装h5py失败&#xff0c;HDF5已经安装使用pip install h5py命令安装已经安装了HDF5-1.10.0-win64.msi3第一张图上说的是,“不能打开头文件hd…

课后练习----实现窗口的切换

1、运用事件处理相关知识&#xff0c;完成两个窗口之间的切换&#xff0c;例如&#xff1a;登陆窗口------》注册窗口 package Date; import java.awt.Color;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing…

Hello 云栖

这是第一篇博客

ai物联网工业_人工智能和物联网将如何改变行业

ai物联网工业by Mariya Yao姚iya(Mariya Yao) 人工智能和物联网将如何改变行业 (How Artificial Intelligence & the Internet of Things will transform industries) 微软首席技术官凯文斯科特(Kevin Scott)访谈 (An interview with Microsoft CTO Kevin Scott) As part …

20145206邹京儒《网络对抗》逆向及Bof基础实践

20145206邹京儒《网络对抗》逆向及Bof基础实践 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件。 该程序正常执行流程是&#xff1a;main调用foo函数,foo函数会简单回显任何用户输入的字符串。 该程序同时包含另一个代码片段&#xff0c…

计算机专业考研过关率高么,考研过国家线的几率有多大?被刷的有多少?

考研每年究竟有多少人可以过国家线&#xff0c;可能很多同学都对很奇心&#xff0c;很想知道这个数据。很多人应该都知道&#xff0c;教育部在划定国家线时&#xff0c;会统计考生的总体情况&#xff0c;然后再分别统计13个大类学科&#xff0c;产生一个大致的数据的&#xff0…

复工复产三个一内容_节后复产复工,彭聪恩强调“三个一”

彭聪恩查看大良永旺购物商场监控室顺德城市网消息 (记者张琼)春节已过&#xff0c;元宵将至&#xff0c;安全生产工作时刻不可放松。为确保全区市民过上一个安全祥和的元宵节&#xff0c;昨日(2月21日)上午&#xff0c;顺德区委副书记、区长彭聪恩&#xff0c;副区长赖雪晖带队…

leetcode1405. 最长快乐字符串(贪心算法)

如果字符串中不含有任何 ‘aaa’&#xff0c;‘bbb’ 或 ‘ccc’ 这样的字符串作为子串&#xff0c;那么该字符串就是一个「快乐字符串」。 给你三个整数 a&#xff0c;b &#xff0c;c&#xff0c;请你返回 任意一个 满足下列全部条件的字符串 s&#xff1a; s 是一个尽可能…

Haproxy+Keepalived实现负载均衡

HaproxyKeepalived实现负载均衡HAProxy介绍反向代理服务器,支持双机热备支持虚拟主机,但其配置简单,拥有非常不错的服务器健康检查功能,当其代理的后端服务器出现故障, HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入新的1.3引入了frontend,backend&#xff1b;f…

chrome麦克风权限_如何在Chrome扩展程序中处理麦克风输入权限和语音识别

chrome麦克风权限by Palash Taneja由Palash Taneja 如何在Chrome扩展程序中处理麦克风输入权限和语音识别 (How to handle mic input permissions and speech recognition in Chrome extensions) This tutorial assumes that you have a basic understanding of Chrome extens…

云计算机房架构图,云计算架构技术与实践

云计算架构技术与实践从将云计算技术引入传统数据中心所带来的独特商业价值角度看&#xff0c;重点可以从开源与节流两个方面来衡量云计算的核心竞争力。1节流(Cost Saving)方面在业务系统搭建过程中&#xff0c;云计算和虚拟化使得企业及运营商的烟囱式软件应用可以突破应用边…

C#使用CLR/C++的DLL间接调用Native C++的DLL

C#使用CLR/C的DLL间接调用Native C的DLL 开发环境&#xff1a;win 7 VS2010 简介&#xff1a;C#的exe使用CLR/C间接调用Native C的DLL. 第一步&#xff1a;创建一个C#的Console Application工程-->命名“ConsoleApplication1”。 第二步&#xff1a;创建一个CLR/C的工程&am…

列表输出循环左移_python 列表推导式(经典代码)(21)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python截止到目前为止&#xff0c;python基础内容已经学习了50%左右&#xff0c;在学习编程过程中&#xff0c;我们不仅要学习python语法&#xff0c;同时也需要学习如何把自己代码写的更美观&#xff0c;效率更高。一.…

leetcode100. 相同的树(dfs)

给定两个二叉树&#xff0c;编写一个函数来检验它们是否相同。如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。示例 1:输入: 1 1/ \ / \2 3 2 3[1,2,3], [1,2,3]输出: true### 代码java /*** Definiti…

k8s 分发证书文件 启动文件

接着上面的博客继续写 准备三台主机 192.168.1.71 192.168.1.72 192.168.1.73 现在k8s压缩包 我使用时1.12版本 不能下载请FQ 百度网盘提供1.12版本 https://pan.baidu.com/s/1Ty6DRaRtL-0HiTCwy5ubPA n6cy 192.168.1.71 执行 pwd -> /tmp tar -zxf kubernetes-server-lin…

如何确保您的Progressive Web App保持其Lighthouse审核分数

by Ondrej Chrastina通过Ondrej Chrastina 如何确保您的Progressive Web App保持其Lighthouse审核分数 (How to make sure your Progressive Web App keeps its Lighthouse audit score) I bet most of you have implemented a web application before. Some of you may even …

计算机字节换算在线,计算机字节换算(计算机字节换算器)

8bit(位)1Byte(字节)1024Byte(字节)1KB1024KB1MB1024MB1GB 换算率约等于1000(1024)&#xff0c;从大到小顺序为T、GB、MB(兆Zhao)、KB、B再小就是位了。.字节(Byte 发音&#xff1a;/‘bait/)&#xff1a;字节是通过网络传输信息(或在硬盘或内存中存储信息)的单位。 在ASCII码中…