This commit is contained in:
skidoodle 2024-03-13 00:33:46 +01:00
commit e124a47765
19374 changed files with 9806149 additions and 0 deletions

View file

@ -0,0 +1,71 @@
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text.RegularExpressions;
using DataTable = System.Data.DataTable;
namespace Kreta.BusinessLogic.Utils
{
/// <summary>
/// Extensions for manipulating DataTables
/// </summary>
public static class DataTableExtensions
{
private static string suffixPattern = @"(_DNAME)|(_BNAME)|(_BOOL)";
/// <summary>
/// Replaces id columns with added _DNAME and _BNAME colums.
/// </summary>
/// <param name="table">DataTable returned by DataAccessBase.GetData.</param>
public static DataTable ConsolidateColumns(this DataTable table)
{
//Reading all column names
var columnNames = (table.Columns.Cast<DataColumn>().Select(column => column.ColumnName)).ToList();
//Selecting the columns we need in the right order
var orderedColumnNames = new List<string>();
foreach (var name in columnNames)
{
if (Regex.IsMatch(name, suffixPattern))
{
continue;
}
if (columnNames.Contains($"{name}_DNAME"))
{
orderedColumnNames.Add($"{name}_DNAME");
}
else if (columnNames.Contains($"{name}_BNAME"))
{
orderedColumnNames.Add($"{name}_BNAME");
}
else
{
orderedColumnNames.Add(name);
}
}
//Removing everything else
var redundantColumnNames = columnNames.Except(orderedColumnNames);
foreach (var name in redundantColumnNames)
{
table.Columns.Remove(name);
}
//Ordering columns
var i = 0;
foreach (var name in orderedColumnNames)
{
table.Columns[name].SetOrdinal(i++);
}
//Renaming columns
var suffixedColumnNames = orderedColumnNames.Where(n => Regex.IsMatch(n, suffixPattern));
foreach (var name in suffixedColumnNames)
{
table.Columns[name].ColumnName = Regex.Replace(name, suffixPattern, string.Empty);
}
return table;
}
}
}