前几天写了一篇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 行转列相关推荐

  1. C# DataTable 行转列通用方法

    废话不多说,直接上代码,别问我代码是谁,为什么要上它?(注意,转发或者引用我的代码的,请标明出处连接,否则菊花难保!) 下面举两个列子的数据,如下代码所示 DataTable CreateDt1() ...

  2. C# DataTable 行转列 列转行 同时转换

    需求:数据库数据都是纵向的,呈现的时候要求是横向(列转行)同时看到行头(行转列). 分析:很多报表呈现都要求要这样显示,用类是可以实现,但是代码多,又需要建很多dto.发下Excel有转置功能,但又不 ...

  3. linq to sql 行转列_SQL 难题:行转列

    问题:有一张学生成绩表sc(sid 学号,cid 课程,score 成绩),请查询出每个学生的英语.数学的成绩(行转列,一个学生只有一行记录). 建表语句: create 实现方式1--join 这种 ...

  4. linq to sql 行转列_SQL进阶:SQL高级编程语法实例

    之前写过的文章: canhui87:Oracle数据统计必会语法知识​zhuanlan.zhihu.com 主要是告诉大家学习SQL高级编程的参考路径,现在把书里简单的实例代码整理出来,方便以后随时查 ...

  5. linq to sql 行转列_n套SQL面试题--行转列、留存、日活等

    第一套 面试题1.请写出表一中各地市客户数.总费用(ARPU之和) 的SQL语句 2.请写出表一中各地市ARPU(0,30),[30,50),[50-80),[80以上)客户数分别是多少的SQL语句 ...

  6. sqlserver 行转列

    还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下 sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table ...

  7. C#动态操作DataTable(新增行、列、查询行、列等)

    public void CreateTable()         {             //创建表             DataTable dt = new DataTable();    ...

  8. Android Webservices 返回多行多列数据(Dataset)

    对于之前从事.net或者java开发人员,习惯了从后台获取网格数据(多行多列DataTable),但转行从事android开发,难免会不习惯 Android调用Webservice时,如果返回值是一个 ...

  9. php html转成数组,PHP_php将HTML表格每行每列转为数组实现采集表格数据的方法,本文实例讲述了php将HTML表格每 - phpStudy...

    php将HTML表格每行每列转为数组实现采集表格数据的方法 本文实例讲述了php将HTML表格每行每列转为数组实现采集表格数据的方法.分享给大家供大家参考.具体如下: 下面的php代码可以将HTML表 ...

最新文章

  1. matplotlib 设置图形大小时 figsize 与 dpi 的关系
  2. Newton差分插值性质证明(均差与差分的关系证明)
  3. VS新建工程或者新建项时 出现未定义标识符号
  4. 本地存储与云存储方案价值对比—Vecloud
  5. 软工实践——团队作业需求规格说明书——原型UI设计
  6. MRU 列表序列化的 Boost.MultiIndex 示例
  7. Vue实现的滑动切换路由组件
  8. How ASP.NET MVC Works?
  9. IC设计前端几本经典书籍
  10. Python实例讲解 -- 认识wxpython 的 Frame
  11. VBScript基础
  12. 微信开放平台开发第三方授权登陆(一):开发前期准备
  13. php js 美国时间转换,洛杉矶时间换算(世界时间换算器在线)
  14. 股市潜规则 你经历过几个?(转)
  15. STM32f103系列和f107系列移植
  16. OpenCV 视频处理框架
  17. ip ban linux,linux – fail2ban:unban ip如何(使用fail2ban-client)
  18. 桌面智能盆栽——【1】项目背景
  19. Adobe认证证书(ACCD/ACPE)说明
  20. c#.net command 命令详细分析

热门文章

  1. qt按钮禁用和激活禁用_为什么试探法只是经验法则:禁用按钮的情况
  2. 屏幕广播系统_如何设计系统,而不是屏幕
  3. 苹果风格ui_苹果如何使Soft-UI成为未来
  4. 如何用Markdown轻松排版知乎专栏文章?
  5. NHibernate获取实体配置信息(表名,列名等等)
  6. 深入理解计算机系统读书笔记
  7. shell 获取值 默认值
  8. 【转载】ESFramewor使用技巧(2)-- 在插件中使用NHibernate
  9. 打印图片的属性和实现另存图片功能以及使用numpy
  10. Android——监听事件总结