/// <summary>
        /// 
        /// </summary>
        /// <param name="dataSet"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static string ToHtml(this DataSet dataSet, HtmlSettings settings = null)
        {
            if (settings == null)
            {
                settings = new HtmlSettings()
                {
                    WithLineFeeds = false
                };
            }

            var separator = settings.WithLineFeeds ? "" : "\n";

            var sb = new StringBuilder();
            sb.Append($"<h2>{dataSet.DataSetName}</h2>{separator}"); // DataSetName never null ?

            var i = 1;
            foreach (DataTable table in dataSet.Tables)
            {
                sb.Append($"<h3>{table.TableName ?? $"Table{i}"}</h3>{separator}");
                sb.Append(table.ToHtmlTable(settings));
                i++;
            }

            return sb.ToString();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataSet"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        public static string ToHtml(this DataSet dataSet, HtmlSettings settings = null)
        {
            if (settings == null)
            {
                settings = new HtmlSettings()
                {
                    WithLineFeeds = false
                };
            }

            var separator = settings.WithLineFeeds ? "" : "\n";

            var sb = new StringBuilder();

            sb.Append($"<h2>{dataSet.DataSetName}</h2>{separator}"); // DataSetName never null ?

            var i = 1;

            foreach (DataTable table in dataSet.Tables)
            {
                sb.Append($"<h3>{table.TableName ?? $"Table{i}"}</h3>{separator}");
                sb.Append(table.ToHtmlTable(settings));
                i++;
            }

            return(sb.ToString());
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        /// part of code borrowed from http://stackoverflow.com/questions/19682996/datatable-to-html-table
        public static string ToHtmlTable(this DataTable dataTable, HtmlSettings settings = null)
        {
            if (settings == null)
            {
                settings = new HtmlSettings()
                {
                    WithLineFeeds = false
                };
            }

            var separator = settings.WithLineFeeds ? "" : "\n";

            var table = new string[dataTable.Rows.Count + 1];
            long counter = 1;
            table[0] = "<tr><th>" + String.Join("</th><th>", (from c in dataTable.Columns.Cast<DataColumn>() select HtmlEncode(c.ColumnName)).ToArray()) + $"</td></tr>{separator}";
            foreach (DataRow row in dataTable.Rows)
            {
                table[counter] = "<tr><td>" + String.Join("</td><td>", (from o in row.ItemArray select HtmlEncode(o.ToString())).ToArray()) + $"</td></tr>{separator}";
                counter++;
            }

            return "<table>" + String.Join("", table) + "</table>";
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="dataTable"></param>
        /// <param name="settings"></param>
        /// <returns></returns>
        /// part of code borrowed from http://stackoverflow.com/questions/19682996/datatable-to-html-table
        public static string ToHtmlTable(this DataTable dataTable, HtmlSettings settings = null)
        {
            if (settings == null)
            {
                settings = new HtmlSettings()
                {
                    WithLineFeeds = false
                };
            }

            var separator = settings.WithLineFeeds ? "" : "\n";

            var  table   = new string[dataTable.Rows.Count + 1];
            long counter = 1;

            table[0] = "<tr><th>" + String.Join("</th><th>", (from c in dataTable.Columns.Cast <DataColumn>() select HtmlEncode(c.ColumnName)).ToArray()) + $"</td></tr>{separator}";
            foreach (DataRow row in dataTable.Rows)
            {
                table[counter] = "<tr><td>" + String.Join("</td><td>", (from o in row.ItemArray select HtmlEncode(o.ToString())).ToArray()) + $"</td></tr>{separator}";
                counter++;
            }

            return("<table>" + String.Join("", table) + "</table>");
        }