程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)
- public static DataTable Join(DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC)
- {
- DataTable table = new DataTable("Join");
- using (DataSet ds = new DataSet())
- {
- ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() });
- DataColumn[] First_columns = new DataColumn[FJC.Length];
- for (int i = ; i < First_columns.Length; i++)
- {
- First_columns[i] = ds.Tables[].Columns[FJC[i].ColumnName];
- }
- DataColumn[] Second_columns = new DataColumn[SJC.Length];
- for (int i = ; i < Second_columns.Length; i++)
- {
- Second_columns[i] = ds.Tables[].Columns[SJC[i].ColumnName];
- }
- DataRelation r = new DataRelation(string.Empty, First_columns, Second_columns, false);
- ds.Relations.Add(r);
- for (int i = ; i < First.Columns.Count; i++)
- {
- table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType);
- }
- for (int i = ; i < Second.Columns.Count; i++)
- {
- //看看有没有重复的列,如果有在第二个DataTable的Column的列明后加_Second
- if (!table.Columns.Contains(Second.Columns[i].ColumnName))
- table.Columns.Add(Second.Columns[i].ColumnName, Second.Columns[i].DataType);
- else
- table.Columns.Add(Second.Columns[i].ColumnName + "_1", Second.Columns[i].DataType);
- }
- table.BeginLoadData();
- int itable2Colomns = ;
- if (ds.Tables[].Rows.Count > ) {
- itable2Colomns = ds.Tables[].Rows[].ItemArray.Length;
- }
- foreach (DataRow firstrow in ds.Tables[].Rows)
- {
- //得到行的数据
- DataRow[] childrows = firstrow.GetChildRows(r);//第二个表关联的行
- if (childrows != null && childrows.Length > )
- {
- object[] parentarray = firstrow.ItemArray;
- foreach (DataRow secondrow in childrows)
- {
- object[] secondarray = secondrow.ItemArray;
- object[] joinarray = new object[parentarray.Length + secondarray.Length];
- Array.Copy(parentarray, , joinarray, , parentarray.Length);
- Array.Copy(secondarray, , joinarray, parentarray.Length, secondarray.Length);
- table.LoadDataRow(joinarray, true);
- }
- }
- else//如果有外连接(Left Join)添加这部分代码
- {
- object[] table1array = firstrow.ItemArray;//Table1
- object[] table2array = new object[itable2Colomns];
- object[] joinarray = new object[table1array.Length + itable2Colomns];
- Array.Copy(table1array, , joinarray, , table1array.Length);
- Array.Copy(table2array, , joinarray, table1array.Length, itable2Colomns);
- table.LoadDataRow(joinarray, true);
- DataColumn[] dc = new DataColumn[];
- dc[] = new DataColumn("");
- }
- }
- table.EndLoadData();
- }
- return table;
- }
程序中实现两个DataTable的Left Join效果(修改了,网上第二个DataTable为空,所处的异常)的更多相关文章
- 关于vue中的videoPlayer的src视频地址参数动态修改(网上一堆错误方法,被误导很久,自己找到了正确的方法,供大家借鉴)
方法很简单:相信大家的问题应该是改变src的值吧,动态赋值这一步简单.this.playerOptions['sources'][0]['src'] 就是这一步解决提取src问题,主要部分用绿色框起来 ...
- js 购物车中,多件商品数量加减效果修改,实现总价随数量加减改变
<!DOCTYPE html> <html> <head> <meta charset=UTF-8 /> <title>无标题文档</ ...
- C#控制台或应用程序中两个多个Main()方法的可行性方案
大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...
- C#控制台或应用程序中两个多个Main()方法的设置
大多数初级程序员或学生都认为在C#控制台或应用程序中只能有一个Main()方法.但是事实上是可以有多个Main()方法的. 在C#控制台或应用程序中,在多个类中,且每个类里最多只能存在一个Main() ...
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- VC++ 在两个程序中 传送字符串等常量值的方法:使用了 WM_COPYDATA 消息(转载)
转载:http://www.cnblogs.com/renyuan/p/5037536.html VC++ 在两个程序中 传递字符串等常量值的方法:使用了 WM_COPYDATA 消息的 消息作用: ...
- 为TextView设置两种状态,程序中可以动态切换
经常会需要用文字的两种状态来表示当前系统的某两种状态.比如: 这里的第一个TextView和后两个TextView就表示了两种状态.我们可以在程序的动态的切换状态(而不是直接修改颜色) ...
- 5.把报表集成到Web应用程序中-生成网页和导出两种方式
转自:https://wenku.baidu.com/view/104156f9770bf78a65295462.html 第四部分,把报表集成到Web应用程序中 用MyEclipse新建一个Web ...
- 两种方法:VS2008下C++窗体程序显示控制台的方法——在QT程序中使用cout和cin
老蔡写了一个基于QT的窗体程序,而过去写的类的调试信息都是用cout显示的,苦于窗体程序无法显示cout信息很多信息都看不到,于是就想到让控制台和窗体同时显示.显示控制台方法如下 1.项目(或者叫“工 ...
随机推荐
- [H5表单]html5自带表单验证体验优化及提示气泡修改
慕课网之前录制的视频,js/jquery各种宽高的理解和应用,最近终于上线了.还有一个html5左侧导航没有上线!最近慕课网系列课程让我录制一个html5表单验证的课程.今天就稍微说一下表单验证!另外 ...
- Angular4 step by step.4
1.官方的模拟远程调用API接口没整出来,干脆自己使用 最新版本 .netcore2.1.0 preview 作为请求地址 2.直接上图懒得沾代码了,等完善后再开放所有源码: 3.使用了Chole.O ...
- golang 应用的部署相关技术
nohup命令 在 linux 下面部署,我们可以利用 nohup 命令,把应用部署在后端,如下所示: nohup ./yourapp & 这样你的应用就跑在了 Linux 系统的守护进程 n ...
- Java序列话和反序列化理解(New)
public interface Serializable {} 该接口没有任何实现方法,是一种标志,instance of Serializable 会判断object类型 一.序列化和反序列化的 ...
- [TJOI2007]小朋友
题面 Luogu Sol 弦图最大独立集 做法见上篇博客 # include <bits/stdc++.h> # define RG register # define IL inline ...
- Python-常用模块1
今天我们来看一看python中的常用的模块,内容有点多,我会分两天来更新这些知识 一.什么是模块 模块就是我们把装有特定功能的代码就行归类的结果,从代码编写的单位来看我们的程序,从小到大的顺序:一条代 ...
- 表单校验常用原生js库
1.字符串去除左右空格继承形式// 除去左右空格String.prototype.Trim = function() { return this.replace(/(^\s*)|(\s*$)/g, & ...
- Html5中 视频 音频标签 进度条问题
最近项目中使用Html5的video和audio标签来在线播放视频和音频文件,但是遇到个奇葩的问题,页面上播放之后进度条无效, 查看w3c之后发现html代码并没有什么不同,之后猜想如果用静态的htm ...
- [小北De编程手记] : Lesson 04 - Selenium For C# 之 API 上
这一部分,我准备向大家介绍Selenium WebDriver的常用API,学习这部分内容需要大家最好有一些简单的HTML相关知识,本文主要涉及到以下内容: Selenium API:元素检查 Sel ...
- Aysnc-callback with future in distributed system
Aysnc-callback with future in distributed system