两个DataTable左连接查询(不使用Linq)

  /// <summary>  
        /// 处理DataTable的方法(通过此方法模仿左连接效果)  
        /// </summary>  
        /// <param name="TargetTable"></param>  
        /// <param name="JoinTable"></param>  
        /// <param name="JoinColumnName">作为连接的列名</param>  
        /// <param name="AddColumnsFromJT">要纳入目标 DataTable的列名</param>  
        private static void DataTableJoin( DataTable TargetTable, DataTable JoinTable, string JoinColumnName, params string[] AddColumnsFromJT)
        {
            if (!TargetTable.Columns.Contains(JoinColumnName))
            {
                throw new Exception("目标DataTable中无" + JoinColumnName + "列!");
            }
            if (!JoinTable.Columns.Contains(JoinColumnName))
            {
                throw new Exception("连接DataTable中无" + JoinColumnName + "列!");
            }
            try
            {
                bool Exist = false;//标志是否存在与当前行的zone/org对应的数字,不存在则赋0  
                int ColumnIndex = TargetTable.Columns.Count;//列的序号  
                foreach (string Column in AddColumnsFromJT)
                {
                    // 如果列名不与已有列重复,则用此列名,否则,用列的序号  
                    if (!TargetTable.Columns.Contains(Column))
                    {
                        TargetTable.Columns.Add(Column);
                    }
                    else
                    {
                        TargetTable.Columns.Add(ColumnIndex.ToString());
                    }

                    for (int i = 0; i < TargetTable.Rows.Count; i++)
                    {
                        Exist = false;
                        foreach (DataRow JoinRow in JoinTable.Rows)
                        {
                            if (JoinRow[JoinColumnName].ToString() == TargetTable.Rows[i][JoinColumnName].ToString())
                            {

                                TargetTable.Rows[i][ColumnIndex] = JoinRow[Column];
                                Exist = true;
                            }
                        }
                        if (!Exist)
                        {
                            TargetTable.Rows[i][ColumnIndex] = DBNull.Value;
                        }
                    }
                    ColumnIndex++;
                }
            }
            catch (Exception e)
            {
                throw new Exception("执行DataTableJoin失败。/n" + e.Message);
            }
        }  

 

posted @ 2014-03-28 10:47  超级塞亚人  阅读(784)  评论(0)    收藏  举报