本文转载自: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[] { "张三","男", });
dt.Rows.Add(new object[] { "张三","男", });
dt.Rows.Add(new object[] { "李四","男", });
dt.Rows.Add(new object[] { "李四","女", });
dt.Rows.Add(new object[] { "王五","女", });
DataTable dtResult = dt.Clone();
for (int i = ; 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 = ;
//内层也是循环同一个表,当遇到不同的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[] { "张三","男", });
dt.Rows.Add(new object[] { "张三","男", });
dt.Rows.Add(new object[] { "李四","男", });
dt.Rows.Add(new object[] { "李四","女", });
dt.Rows.Add(new object[] { "王五","女", });
DataTable dtResult = dt.Clone();
DataTable dtName = dt.DefaultView.ToTable(true, "name","sex");
for (int i = ; i < dtName.Rows.Count; i++)
{
DataRow[] rows = dt.Select("name='" + dtName.Rows[i][] + "' and sex='" + dtName.Rows[i][] + "'");
//temp用来存储筛选出来的数据
DataTable temp = dtResult.Clone();
foreach (DataRow row in rows)
{
temp.Rows.Add(row.ItemArray);
} DataRow dr = dtResult.NewRow();
dr[] = dtName.Rows[i][].ToString();
dr[] = temp.Compute("sum(score)", "");
dtResult.Rows.Add(dr);
} 、使用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 > )
{
query.ToList().ForEach(q =>
{
Console.WriteLine(q.name + "," + q.sex + "," + q.score);
});
}

(转)C#用Linq实现DataTable的Group by数据统计的更多相关文章

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

    http://www.cnblogs.com/sydeveloper/archive/2013/03/29/2988669.html 1.用两层循环计算,前提条件是数据已经按分组的列排好序的. Dat ...

  2. linq to datatable 和lambda查询datatable

    用Linq查询DataTable static DataTable table = new DataTable(); static DataColumn dc = new DataColumn(); ...

  3. LinQ实现DataTable不定行转列 行列转换,有图

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="LinqDemo2.aspx.c ...

  4. 每日学习心得:Linq解决DataTable按照某一列的值排序问题/DataTable 导出CSV文件/巧用text-overflow解决数据绑定列数据展示过长问题

    2013-8-5 1 Linq解决DataTable按照某一列的值排序 在之前的总结中提到过对拼接而成的复合的DataTable按照某一列值的大小排序,那个主要的思想是在新建表结构时将要排序的那一列的 ...

  5. C# Linq To DataTable 分组统计 DEMO

    DataTable dt = SQLLayer.Get工作量统计(beginDate, endDate);             var querySum = from t in dt.AsEnum ...

  6. C# Linq to sql 实现 group by 统计多字段 返回多字段

    Linq to sql 使用group by 统计多个字段,然后返回多个字段的值,话不多说,直接上例子: where u.fy_no == fy_no orderby u.we_no group u  ...

  7. Linq查询datatable的记录集合

    通过linq查询datatable数据集合满足条件的数据集 1.首先定义查询字段的变量,比方深度 string strDepth=查询深度的值: var dataRows = from datarow ...

  8. LINQ返回DataTable类型 list转dataset 转换为JSON对象

    using System.Web.Script.Serialization; using System.Collections.Generic; using System.Reflection; us ...

  9. LINQ to DataSet,对离线数据的Linq支持、AsEnumeable()

    一.DataTable的扩展方法: 1.DataTable转Linq:AsEnumerable 方法 返回IEnumerable<T>对象,其中泛型参数T是DataRow. 此对象可用在 ...

随机推荐

  1. 源代码中直接package edu.princeton.cs.algs4还是import edu.princeton.cs.algs4问题

    对于前者这个问题,直接在src目录下命名一个包:edu.princeton.cs.algs4 即创建了文件:src->edu->princeton->cs->algs4,然后把 ...

  2. Eclipse4.2安装样式插件

    1.插件地址 http://eclipse-color-theme.github.com/update 点击Eclipse菜单 Help>>Install New Software... ...

  3. JAVA获取Spring上下文

    1. 添加监听 public class SpringContextListener implements ServletContextListener { //获取spring注入的bean对象 p ...

  4. python基础5 - 产生随机数

    随机数 在 Python 中,要使用随机数,首先需要导入 随机数 的 模块 —— “工具包” import random 导入模块后,可以直接在 模块名称 后面敲一个 . 然后按 Tab 键,会提示该 ...

  5. 【NOIP2013 普及组】车站分级

    [NOIP2013 普及组]车站分级 一.题目 [NOIP2013 普及组]车站分级 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 0 [提交][状态][讨论版] 题目描述 ...

  6. androidstudio与unity进行交互

    参考地址:http://blog.csdn.net/yangxuan0261/article/details/52427119 http://www.360doc.com/content/17/032 ...

  7. Java 反射机制应用实践

    反射基础 p.s: 本文需要读者对反射机制的API有一定程度的了解,如果之前没有接触过的话,建议先看一下官方文档的Quick Start(https://docs.oracle.com/javase/ ...

  8. hdu 3410 单调栈

    http://acm.hdu.edu.cn/showproblem.php?pid=3410 Passing the Message Time Limit: 2000/1000 MS (Java/Ot ...

  9. The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Microsoft SQL Server,错误: 15128)

    记录下 The CHECK_POLICY and CHECK_EXPIRATION options cannot be turned OFF when MUST_CHANGE is ON. (Micr ...

  10. linux 部署python2.7

    tar xvf Python-.tar.bz2 mkdir /usr/local/python27 ls cd Python- ./configure --prefix=/usr/local/pyth ...