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();
}
}