|
不用任何sql语句的 方法一: public DataTable Join(DataTable First, DataTable Second, DataColumn[] FJC, DataColumn[] SJC) //创建一个新的DataTable DataTable table = new DataTable("Join");
using (DataSet ds = new DataSet()) //把DataTable Copy到DataSet中 ds.Tables.AddRange(new DataTable[] { First.Copy(), Second.Copy() }); DataColumn[] parentcolumns = new DataColumn[FJC.Length]; for (int i = 0; i < parentcolumns.Length; i++) parentcolumns[i] = ds.Tables[0].Columns[FJC[i].ColumnName]; } DataColumn[] childcolumns = new DataColumn[SJC.Length]; for (int i = 0; i < childcolumns.Length; i++) childcolumns[i] = ds.Tables[1].Columns[SJC[i].ColumnName]; }
DataRelation r = new DataRelation(string.Empty, parentcolumns, childcolumns, false); ds.Relations.Add(r);
for (int i = 0; i < First.Columns.Count; i++) table.Columns.Add(First.Columns[i].ColumnName, First.Columns[i].DataType); } for (int i = 0; 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 + "_Second", Second.Columns[i].DataType); }
foreach (DataRow firstrow in ds.Tables[0].Rows) //得到行的数据 DataRow[] childrows = firstrow.GetChildRows(r); if (childrows != null && childrows.Length > 0) object[] parentarray = firstrow.ItemArray; foreach (DataRow secondrow in childrows) object[] secondarray = secondrow.ItemArray; object[] joinarray = new object[parentarray.Length + secondarray.Length]; Array.Copy(parentarray, 0, joinarray, 0, parentarray.Length); Array.Copy(secondarray, 0, joinarray, parentarray.Length, secondarray.Length); table.LoadDataRow(joinarray, true); } } } table.EndLoadData(); }
} //////////////////////////////////// 方法二: 该方法更多体现的是两张表的合并 /// 要合并的表一 public DataTable MergeDataTable(DataTable dt1, DataTable dt2, String KeyColName)
dtReturn.Columns.Add( dt1.Columns[i].ColumnName ); for(j=0; j dtReturn.Columns.Add(dt2.Columns[j].ColumnName); //建立表的空间
//查找的dt2中KeyColName的数据,与dt1相同的行 return dtReturn ; |
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12476590/viewspace-605397/ ,如需转载,请注明出处,否则将追究法律责任。