internal DataTable GetResultsDataTable()
        {
            if (DataTables.Count < 2)
            {
                throw new Exception("Must have at least 2 tables added to compare");
            }


            List <DataTable> dtsTemp  = new List <DataTable>();
            List <DataTable> dts      = new List <DataTable>();
            DataTable        dtResult = new DataTable();

            dtResult.CaseSensitive = Config.DataFieldValuesCaseSensitive;

            DataTables.CopyTo(dts);

            foreach (DataTable dt in dts)
            {
                dtsTemp.Add(dt);
            }


            if (dts != null && dts.Count() > 0)
            {
                DataTable        dtTemp  = new DataTable();
                List <DataTable> dtsCopy = new List <DataTable>();
                dts.CopyTo(dtsCopy);

                foreach (DataTable dt in dtsCopy)
                {
                    dt.AddColumnIfNotExists(Config.ExistsInColumnNamePrefix, typeof(string));
                    foreach (DataRow r in dt.Rows)
                    {
                        r[Config.ExistsInColumnNamePrefix] = "Yes";
                    }
                }

                DataColumn[] keys = new DataColumn[dtsCopy[0].PrimaryKey.Length];
                for (int i = 0; i < dtsCopy[0].PrimaryKey.Length; i++)
                {
                    try
                    {
                        Type t = dtsCopy[0].PrimaryKey[i].DataType;
                        dtResult.AddColumnIfNotExists(dtsCopy[0].PrimaryKey[i].ColumnName, t);//typeof(string));
                        keys[i] = dtResult.Columns[dtsCopy[0].PrimaryKey[i].ColumnName];
                        ////     result.CommonKeyColumnNames.Add(dtsCopy[0].PrimaryKey[i].ColumnName);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                dtResult.PrimaryKey = keys;
                List <string> tableNames          = new List <string>();
                List <string> commonNonKeyColumns = dtsCopy.GetColumnNames_Shared_NonPrimaryKey().ToList();
                List <string> uniqueNonKeyColumns = dtsCopy.GetColumnNames_NotShared_NonPrimaryKey().ToList();

                foreach (DataTable dt in dtsCopy)
                {
                    tableNames.Add(dt.TableName);
                    foreach (DataColumn col in dt.Columns)
                    {
                        col.AllowDBNull = true;
                        if (commonNonKeyColumns.IndexOf(col.ColumnName) >= 0)
                        {
                            col.ColumnName = col.ColumnName + Config.WordSeperator + dt.TableName;
                        }
                    }
                    foreach (DataColumn col in dtResult.Columns)
                    {
                        col.AllowDBNull = true;
                    }
                    try
                    {
                        dtResult.Merge(dt);
                    }
                    catch (Exception ex)
                    {
                        dtResult.Merge(dt, true, MissingSchemaAction.AddWithKey);
                        throw ex;
                    }
                }

                string expression = GetKeyStatusExpression(dtsCopy);
                dtResult.AddColumnIfNotExists($"{Config.ExistsInColumnNamePrefix}{Config.WordSeperator}Status", typeof(string), expression);

                foreach (string commonNonKeyColumn in commonNonKeyColumns)
                {
                    expression = GetNonKeyStatusExpression(dtsCopy, commonNonKeyColumn, dtResult);
                    if (expression != "")
                    {
                        dtResult.AddColumnIfNotExists($"{commonNonKeyColumn}{Config.WordSeperator}Status", typeof(string), expression, false);
                    }
                }

                commonNonKeyColumns.Remove(Config.ExistsInColumnNamePrefix);
                foreach (string commonNonKeyColumn in commonNonKeyColumns)
                {
                    foreach (string tableName in tableNames)
                    {
                        dtResult.SetColumnOrdinalIfExists(commonNonKeyColumn + Config.WordSeperator + tableName, dtResult.Columns.Count - 1);
                    }
                }

                foreach (string uniqueNonKeyColumn in uniqueNonKeyColumns)
                {
                    foreach (DataTable dt in dtsCopy)
                    {
                        if (Config.IncludeUniqueColumnsInOutput)
                        {
                            if (dt.Columns.Contains(uniqueNonKeyColumn))
                            {
                                dtResult.SetColumnOrdinalIfExists(uniqueNonKeyColumn, dtResult.Columns.Count - 1);
                                dtResult.RenameColumnIfExists(uniqueNonKeyColumn, uniqueNonKeyColumn + " " + dt.TableName);
                            }
                        }
                        else
                        {
                            dtResult.DeleteColumnIfExists(uniqueNonKeyColumn);
                        }
                    }
                }

                dtResult.TableName = (dtResult.Namespace + " Comparison Results").Trim();
                dtResult.AcceptChanges();
                dtsTemp.Clear();
            }
            return(dtResult);
        }