Linq 实现 DataTable 行转列
前几天写了一篇sqlserver 行转列,http://www.cnblogs.com/li-peng/archive/2012/02/01/2334973.html
由于工作需要,要把查出来的DataTable实现 行转列,
正好这一阵子在用Linq 就做了一个行转列的小例 子
转换前的table:
转换后的table:
代码里有详细的说明,
还有一些参数我都截图了下面有
using System;using System.Collections.Generic;using System.Data;using System.Linq;using System.Text; namespace ConvertToTable {class Program {static void Main(string[] args) {#region 添加一个表 DataTable _dt = new DataTable(); _dt.Columns.Add(new DataColumn("staff_id", typeof(int)) { DefaultValue = 0 }); //员工 id _dt.Columns.Add(new DataColumn("staff_Name", typeof(string)) { DefaultValue = "1" }); //员工名字 _dt.Columns.Add(new DataColumn("staff_TiCheng", typeof(string)) { DefaultValue = "1" });//员工提成规则 _dt.Columns.Add(new DataColumn("staff_TiChengAmount", typeof(double)) { DefaultValue = 0 }); //提成钱数 _dt.Rows.Add(1, "小李", "零点提成", 60); _dt.Rows.Add(1, "小李", "订房提成", 70); _dt.Rows.Add(2, "小张", "零点提成", 500); _dt.Rows.Add(2, "小张", "订房提成", 60); _dt.Rows.Add(2, "小张", "订单提成", 800); _dt.Rows.Add(3, "小王", "零点提成", 30); _dt.Rows.Add(3, "小王", "订单提成", 900);#endregion//输出原始表 Console.WriteLine("原始表:"); DisplayTable(_dt);//输出行转列以后的表 Console.WriteLine("转换以后的表:"); DisplayTable(ConvertToTable(_dt)); Console.ReadLine(); } #region 转换表static DataTable ConvertToTable(DataTable source) { DataTable dt = new DataTable();//前两列是固定的加上 dt.Columns.Add("staff_id"); dt.Columns.Add("staff_Name");//以staff_TiCheng 字段为筛选条件 列转为行 下面有图 var columns = (from x in source.Rows.Cast<DataRow>() select x[2].ToString()).Distinct();//把 staff_TiCheng 字段 做为新字段添加进去 foreach (var item in columns) dt.Columns.Add(item).DefaultValue = 0;// x[1] 是字段 staff_Name 按 staff_Name分组 g 是分组后的信息 g.Key 就是名字 如果不懂就去查一个linq group子句进行分组 var data = from x in source.Rows.Cast<DataRow>() group x by x[1] into gselect new { Key = g.Key.ToString(), Items = g }; data.ToList().ForEach(x => {//这里用的是一个string 数组 也可以用DataRow根据个人需要用 string[] array = new string[dt.Columns.Count];//array[1]就是存名字的 array[1] = x.Key;//从第二列开始遍历 for (int i = 2; i < dt.Columns.Count; i++) {// array[0] 就是 staff_id if (array[0] == null) array[0] = x.Items.ToList<DataRow>()[0]["staff_id"].ToString();//array[0] = (from y in x.Items// where y[2].ToString() == dt.Columns[i].ToString()// select y[0].ToString()).SingleOrDefault();//array[i]就是 各种提成 array[i] = (from y in x.Itemswhere y[2].ToString() == dt.Columns[i].ToString()// y[2] 各种提成名字等于table中列的名字 select y[3].ToString() // y[3] 就是我们要找的 staff_TiChengAmount 各种提成 的钱数 ).SingleOrDefault(); } dt.Rows.Add(array); //添加到table中 }); return dt; }/// <summary>/// 输出表/// </summary>/// <param name="dt"></param> static void DisplayTable(DataTable dt) {//输出列的标题 dt.Columns.Cast<DataColumn>().ToList().ForEach(x => Console.Write(x + "\t")); Console.WriteLine();//输出每行的信息 dt.Rows.Cast<DataRow>().ToList().ForEach(x => { x.ItemArray.ToList().ForEach(y => Console.Write(y.ToString() + "\t\t")); Console.WriteLine(); }); } #endregion } }
//以staff_TiCheng 字段为筛选条件 列转为行 下面有图
// x[1] 是字段 staff_Name
y[2] 各种提成名字等于table中列的名字
本文转自lpxxn博客园博客,原文链接:http://www.cnblogs.com/li-peng/archive/2012/02/27/2370213.html,如需转载请自行联系原作者
Linq 实现 DataTable 行转列相关推荐
- C# DataTable 行转列通用方法
废话不多说,直接上代码,别问我代码是谁,为什么要上它?(注意,转发或者引用我的代码的,请标明出处连接,否则菊花难保!) 下面举两个列子的数据,如下代码所示 DataTable CreateDt1() ...
- C# DataTable 行转列 列转行 同时转换
需求:数据库数据都是纵向的,呈现的时候要求是横向(列转行)同时看到行头(行转列). 分析:很多报表呈现都要求要这样显示,用类是可以实现,但是代码多,又需要建很多dto.发下Excel有转置功能,但又不 ...
- linq to sql 行转列_SQL 难题:行转列
问题:有一张学生成绩表sc(sid 学号,cid 课程,score 成绩),请查询出每个学生的英语.数学的成绩(行转列,一个学生只有一行记录). 建表语句: create 实现方式1--join 这种 ...
- linq to sql 行转列_SQL进阶:SQL高级编程语法实例
之前写过的文章: canhui87:Oracle数据统计必会语法知识zhuanlan.zhihu.com 主要是告诉大家学习SQL高级编程的参考路径,现在把书里简单的实例代码整理出来,方便以后随时查 ...
- linq to sql 行转列_n套SQL面试题--行转列、留存、日活等
第一套 面试题1.请写出表一中各地市客户数.总费用(ARPU之和) 的SQL语句 2.请写出表一中各地市ARPU(0,30),[30,50),[50-80),[80以上)客户数分别是多少的SQL语句 ...
- sqlserver 行转列
还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下 sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table ...
- C#动态操作DataTable(新增行、列、查询行、列等)
public void CreateTable() { //创建表 DataTable dt = new DataTable(); ...
- Android Webservices 返回多行多列数据(Dataset)
对于之前从事.net或者java开发人员,习惯了从后台获取网格数据(多行多列DataTable),但转行从事android开发,难免会不习惯 Android调用Webservice时,如果返回值是一个 ...
- php html转成数组,PHP_php将HTML表格每行每列转为数组实现采集表格数据的方法,本文实例讲述了php将HTML表格每 - phpStudy...
php将HTML表格每行每列转为数组实现采集表格数据的方法 本文实例讲述了php将HTML表格每行每列转为数组实现采集表格数据的方法.分享给大家供大家参考.具体如下: 下面的php代码可以将HTML表 ...
最新文章
- matplotlib 设置图形大小时 figsize 与 dpi 的关系
- Newton差分插值性质证明(均差与差分的关系证明)
- VS新建工程或者新建项时 出现未定义标识符号
- 本地存储与云存储方案价值对比—Vecloud
- 软工实践——团队作业需求规格说明书——原型UI设计
- MRU 列表序列化的 Boost.MultiIndex 示例
- Vue实现的滑动切换路由组件
- How ASP.NET MVC Works?
- IC设计前端几本经典书籍
- Python实例讲解 -- 认识wxpython 的 Frame
- VBScript基础
- 微信开放平台开发第三方授权登陆(一):开发前期准备
- php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
- 股市潜规则 你经历过几个?(转)
- STM32f103系列和f107系列移植
- OpenCV 视频处理框架
- ip ban linux,linux – fail2ban:unban ip如何(使用fail2ban-client)
- 桌面智能盆栽——【1】项目背景
- Adobe认证证书(ACCD/ACPE)说明
- c#.net command 命令详细分析