在下面的例子中实现了3个Join方法,其目的是把两个DataTable连接起来,相当于Sql的InnerJoin方法,返回DataTable的所有列。
如果两个DataTable中的DataColumn有重复的话,把第二个设置为ColumnName+"_Second",下面是代码,希望对大家有所帮助。
usingSystem;
usingSystem.Data;
namespaceWindowsApplication1
{
publicclassSqlOps
{
publicSqlOps()
{
}
publicstaticDataTableJoin(DataTableFirst,DataTableSecond,DataColumn[]FJC,DataColumn[]SJC)
{
//创建一个新的DataTable
DataTabletable=newDataTable("Join");
//UseaDataSettoleverageDataRelation
using(DataSetds=newDataSet())
{
//把
DataTableCopy到DataSet中
for(inti=0;i<parentcolumns.Length;i++)
{
parentcolumns[i]=ds.Tables[0].Columns[FJC[i].ColumnName];
}
DataColumn[]childcolumns=newDataColumn[SJC.Length];
for(inti=0;i<childcolumns.Length;i++)
{
childcolumns[i]=ds.Tables[1].Columns[SJC[i].ColumnName];
}
//创建关联
DataRelationr=newDataRelation(string.Empty,parentcolumns,childcolumns,false);
ds.Relations.Add(r);
//为关联表创建列
for(inti=0;i<First.Columns.Count;i++)
{
table.Columns.Add(First.Columns[i].ColumnName,First.Columns[i].DataType);
}
for(inti=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);
}
table.BeginLoadData();
foreach(DataRowfirstrowinds.Tables[0].Rows)
{
//得到行的数据
DataRow[]childrows=firstrow.GetChildRows(r);
if(childrows!=null&&childrows.Length>0)
{
object[]parentarray=firstrow.ItemArray;
foreach(DataRowsecondrowinchildrows)
{
object[]secondarray=secondrow.ItemArray;
object[]joinarray=newobject[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();
}
returntable;
}
publicstatic
DataTableJoin(
DataTableFirst,
DataTableSecond,DataColumnFJC,DataColumnSJC)
{
returnJoin(First,Second,newDataColumn[]{FJC},newDataColumn[]{SJC});
}
publicstatic
DataTableJoin(
DataTableFirst,
DataTableSecond,stringFJC,stringSJC)
{
returnJoin(First,Second,newDataColumn[]{First.Columns[FJC]},newDataColumn[]{First.Columns[SJC]});
}
}
}