init
This commit is contained in:
commit
e124a47765
19374 changed files with 9806149 additions and 0 deletions
71
Kreta.BusinessLogic/Utils/DataTableExtensions.cs
Normal file
71
Kreta.BusinessLogic/Utils/DataTableExtensions.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue