1. public static System.Data.DataTable TableJoin(System.Data.DataTable dt, System.Data.DataTable dtDetail, string[] parentFieldName, string[] relationFieldName, bool isInnerJoin, string relationName = "")
  2. {
  3. System.Data.DataTable joinDt = new System.Data.DataTable();
  4.  
  5. try
  6. {
  7. using (DataSet ds = new DataSet())
  8. {
  9. ds.Tables.AddRange(new System.Data.DataTable[] { dt, dtDetail });
  10. if (string.IsNullOrEmpty(relationName))
  11. {
  12. relationName = Guid.NewGuid().ToString();
  13. }
  14. List<DataColumn> parentc = new List<DataColumn>();
  15. List<DataColumn> childc = new List<DataColumn>();
  16. foreach (var item in parentFieldName)
  17. {
  18. parentc.Add(dt.Columns[item]);
  19. }
  20. foreach (var item in relationFieldName)
  21. {
  22. childc.Add(dtDetail.Columns[item]);
  23. }
  24. DataRelation relation = new DataRelation(relationName, parentc.ToArray(), childc.ToArray(), false);
  25. ds.Relations.Add(relation);
  26.  
  27. for (int i = ; i < dt.Columns.Count; i++)
  28. {
  29. joinDt.Columns.Add(dt.Columns[i].ColumnName, dt.Columns[i].DataType);
  30. }
  31. for (int i = ; i < dtDetail.Columns.Count; i++)
  32. {
  33. joinDt.Columns.Add(dtDetail.Columns[i].ColumnName, dtDetail.Columns[i].DataType);
  34. }
  35.  
  36. joinDt.BeginLoadData();
  37. foreach (DataRow firstrow in ds.Tables[].Rows)
  38. {
  39. //得到行的数据
  40. DataRow[] childrows = firstrow.GetChildRows(relation);
  41. object[] parentarray = firstrow.ItemArray;
  42. if (childrows != null && childrows.Length > )
  43. {
  44. foreach (DataRow childrow in childrows)
  45. {
  46. object[] childarray = childrow.ItemArray;
  47. object[] joinarray = new object[parentarray.Length + childarray.Length];
  48. Array.Copy(parentarray, , joinarray, , parentarray.Length);
  49. Array.Copy(childarray, , joinarray, parentarray.Length, childarray.Length);
  50. joinDt.LoadDataRow(joinarray, true);
  51. }
  52. }
  53. else
  54. {
  55. if (!isInnerJoin)
  56. {
  57. joinDt.LoadDataRow(parentarray, true);
  58. }
  59. }
  60. }
  61. joinDt.EndLoadData();
  62. }
  63. }
  64. catch (Exception ex)
  65. {
  66. throw ex;
  67. }
  68.  
  69. return joinDt;
  70. }

DataTable表连接的更多相关文章

  1. 把Linq查询返回的var类型的数据 转换为DataTable EF连接查询

    问题:我要获得一个角色下对应的所有用户,需要两表连接查询,虽然返回的只有用户数据,但是我想到若是返回的不只是用户数据,而还要加上角色信息,那么我返回什么类型呢,返回var吗,这样不行. 于是我网上找找 ...

  2. SQL多表连接查询(详细实例)

    转载博客:joeleo博客(http://www.xker.com/page/e2012/0708/117368.html) 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:stud ...

  3. 关于Oracle表连接

    表连接注意left join on与where的区别: select * from dept; select * from emp; select * from emp a right outer j ...

  4. SQL多表连接查询

    SQL多表连接查询 本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图如下: 表2:course  截图如下: (此时这样建表只是为了演示连接SQL语句,当然实际 ...

  5. oracle(sql)基础篇系列(二)——多表连接查询、子查询、视图

        多表连接查询 内连接(inner join) 目的:将多张表中能通过链接谓词或者链接运算符连接起来的数据查询出来. 等值连接(join...on(...=...)) --选出雇员的名字和雇员所 ...

  6. Access数据库多表连接查询

    第一次在Access中写多表查询,就按照MS数据库中的写法,结果报语法错,原来Access的多表连接查询是不一样的 表A.B.C,A关联B,B关联C,均用ID键关联 一般写法:select * fro ...

  7. PostgreSQL-join多表连接查询和子查询

    一.多表连接查询 1.连接方式概览 [inner] join 内连接:表A和表B以元组为单位做一个笛卡尔积,记为表C,然后在C中挑选出满足符合on 语句后边的限制条件的内容. left [outer] ...

  8. SQL 中不同类型的表连接

    http://www.linuxidc.com/Linux/2012-08/68035.htm 1.简介 在关系型数据库中,join操作是将不同的表中的数据联合在一起时非常通用的一种做法.首先让我们看 ...

  9. SQL表连接查询(inner join、full join、left join、right join)

    SQL表连接查询(inner join.full join.left join.right join) 前提条件:假设有两个表,一个是学生表,一个是学生成绩表. 表的数据有: 一.内连接-inner ...

随机推荐

  1. Pandas基本功能之reindex重新索引

    重新索引 reindex重置索引,如果索引值不存在,就引入缺失值 参数介绍 参数 说明 index 用作索引的新序列 method 插值 fill_vlaue 引入缺失值时的替代NaN limit 最 ...

  2. springboot 取消post数据大小限制

    参考 https://blog.csdn.net/kkgbn/article/details/52088068 application.properties 添加 server.tomcat.max- ...

  3. php 读取网站页面源码的经典函数

    Snoopy.class.php下载 include "inc/Snoopy.class.php"; //读取网页,返回网页源文件内容 function read_url($str ...

  4. java面试题:数据库mysql

    Web后端数据库一般用mysql. 数据库基础 Q:数据库三范式是什么? 第一范式:列不可再分 第二范式:行可以唯一区分,主键约束 第三范式:表的非主属性不能依赖与其他表的非主属性 外键约束 且三大范 ...

  5. 织梦 百度sitemap制作教程

    一.新建一个sitemap.htm模板 登录dedecms后台,选择[模板]-[模板管理]-[默认模板管理] 点击最下面的[新建模板]新建一个模板,并复制下面这段代码进去(将代码中的域名改为自己的): ...

  6. zabbix 3.2.6+centos 7 +nginx 1.12+ mysql 5.6+ Grafana +php 5.6

    先只记录关键点 1.nginx.MYSQL 用官方的YUM库安装 2.CENTOS升级到最新 3.ZABBIX 官方RPM安装,然后下载源码库,源码中的PHP复制至NGINX的配置目录 4.NGINX ...

  7. 201. Bitwise AND of Numbers Range (Bit)

    Given a range [m, n] where 0 <= m <= n <= 2147483647, return the bitwise AND(按位与) of all nu ...

  8. vue router返回上一页

    this.$router.go(-1) 不用router时,使用window.history.go(-1);

  9. TZOJ 4912 炮兵阵地(状压dp)

    描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P" ...

  10. cipher的各个模式

    block cipher 工作模式(引自百度)Electronic Codebook Mode 最经典的模式,把明文按64比特为单位分为block, 对所有block使用同样的密钥来加密,最后把输出的 ...