protected static DataSet SortDataSet()

in src/MIMConfigDocumenter/Documenter.cs [1034:1139]


        protected static DataSet SortDataSet(DataSet diffgramDataSet)
        {
            Logger.Instance.WriteMethodEntry();

            try
            {
                if (diffgramDataSet == null)
                {
                    throw new ArgumentNullException("diffgramDataSet");
                }

                var sortedDiffgramDataSet = diffgramDataSet.Clone();

                var printTable = diffgramDataSet.Tables["PrintSettings"];
                sortedDiffgramDataSet.Tables["PrintSettings"].Merge(printTable);

                for (var i = 0; i < diffgramDataSet.Tables.Count; ++i)
                {
                    if (diffgramDataSet.Tables[i].TableName == "PrintSettings")
                    {
                        continue;
                    }

                    var table = diffgramDataSet.Tables[i];
                    var sortColumns = printTable.Select("SortOrder <> -1 AND TableIndex = " + i, "SortOrder").Select(row => (int)row["ColumnIndex"]).ToArray();

                    var tableClone = table.Clone();

                    IEnumerable<DataRow> rows;

                    switch (sortColumns.Length)
                    {
                        case 0:
                            rows = table.Rows.Cast<DataRow>();
                            break;
                        case 1:
                            rows = table.Rows.Cast<DataRow>().OrderBy(row => row[sortColumns[0]]);
                            break;
                        case 2:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]]
                                   select row;
                            break;
                        case 3:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]]
                                   select row;
                            break;
                        case 4:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]]
                                   select row;
                            break;
                        case 5:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]]
                                   select row;
                            break;
                        case 6:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]], row[sortColumns[5]]
                                   select row;
                            break;
                        case 7:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]], row[sortColumns[5]], row[sortColumns[6]]
                                   select row;
                            break;
                        case 8:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]], row[sortColumns[5]], row[sortColumns[6]], row[sortColumns[7]]
                                   select row;
                            break;
                        case 9:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]], row[sortColumns[5]], row[sortColumns[6]], row[sortColumns[7]], row[sortColumns[8]]
                                   select row;
                            break;
                        case 10:
                            rows = from row in table.Rows.Cast<DataRow>()
                                   orderby row[sortColumns[0]], row[sortColumns[1]], row[sortColumns[2]], row[sortColumns[3]], row[sortColumns[4]], row[sortColumns[5]], row[sortColumns[6]], row[sortColumns[7]], row[sortColumns[8]], row[sortColumns[9]]
                                   select row;
                            break;
                        default:
                            throw new ArgumentOutOfRangeException("columns", string.Format(CultureInfo.InvariantCulture, "Columns length must be between {0} and {1}.", 1, Documenter.MaxSortableColumns));
                    }

                    foreach (var row in rows)
                    {
                        tableClone.ImportRow(row);
                    }

                    tableClone.AcceptChanges();

                    sortedDiffgramDataSet.Tables[i].Merge(tableClone);
                }

                sortedDiffgramDataSet.AcceptChanges();

                return sortedDiffgramDataSet;
            }
            finally
            {
                Logger.Instance.WriteMethodExit();
            }
        }