C# 如何按先进先出对数据列进行排序

C# 如何按先进先出对数据列进行排序,c#,algorithm,sorting,datatable,datacolumn,C#,Algorithm,Sorting,Datatable,Datacolumn,我不确定这个问题是否正确,但这正是我想做的 我有一个导入/导出工具,可以使用矩阵电子表格模板导入/导出TestRail中的测试用例,该模板如下所示(AP=适用,NA=不适用): 因此,一旦进入TestRail,它看起来是这样的: 第一节 测试2 测试3 测试4 第二节 测试1 测试3 测试4 测试5 第三节 测试1 测试2 测试3 测试5 但当我从TestRail导出时,列的顺序与导入的顺序不同: Sections Test2 | Test3 | Test4 | T

我不确定这个问题是否正确,但这正是我想做的

我有一个导入/导出工具,可以使用矩阵电子表格模板导入/导出TestRail中的测试用例,该模板如下所示(AP=适用,NA=不适用):

因此,一旦进入TestRail,它看起来是这样的:

  • 第一节
    • 测试2
    • 测试3
    • 测试4
  • 第二节
    • 测试1
    • 测试3
    • 测试4
    • 测试5
  • 第三节
    • 测试1
    • 测试2
    • 测试3
    • 测试5
但当我从TestRail导出时,列的顺序与导入的顺序不同:

Sections        Test2 | Test3 | Test4 | Test1 | Test5
Section 1         AP  |  AP   |  AP   |       |  
Section 2             |  AP   |  AP   |  AP   |  AP
Section 3         AP  |  AP   |       |  AP   |  AP
这是我到目前为止使用DataTable并试图检测之前的测试用例的代码。。。但经过一些测试,它根本不准确/无法正常工作。。。尤其是大量的截面和试验:

String previousTC = String.Empty;

// For each Test Case
// Adds column to the Matrix table for each new Test Cases
foreach (var tcase in currentCases)
{
    if (!dtMatrix.Columns.Contains(tcase.title))
    {
        // Adds a new Column if TestCases does not exist
        dtMatrix.Columns.Add(tcase.title, typeof(string));
    }
    else
    {
        if (dtMatrix.Columns.Contains(previousTC))
        {
            // Gets the position of the previous TestCase 
            // in order to put the new one right after
            var previous = dtMatrix.Columns.IndexOf(previousTC);
            var current = dtMatrix.Columns.IndexOf(tcase.title);
            if (previous >= current)
            {
                dtMatrix.Columns[current].SetOrdinal(previous);
            }
        }
    }
    previousTC = tcase.title;
}
请注意,Test1到test5只是为了解释我的问题,可以是任何东西,不能按字母顺序排列

所以我需要一些帮助来找到正确的算法来解决我的排序顺序问题

非常感谢

编辑:
我想也许,基于TestRail的套件,我可以找到一种合并它们的方法。。然后跟踪每个合并的测试用例列。

因此,如果这些列不应该按字母顺序出现,并且它们不应该按与当前用例相同的顺序出现,那么它们应该按什么顺序出现?按ID。。。每个测试用例都有自己的ID,按照每个部分的顺序排列。我需要找到一种方法来跟踪它们的导入顺序。
String previousTC = String.Empty;

// For each Test Case
// Adds column to the Matrix table for each new Test Cases
foreach (var tcase in currentCases)
{
    if (!dtMatrix.Columns.Contains(tcase.title))
    {
        // Adds a new Column if TestCases does not exist
        dtMatrix.Columns.Add(tcase.title, typeof(string));
    }
    else
    {
        if (dtMatrix.Columns.Contains(previousTC))
        {
            // Gets the position of the previous TestCase 
            // in order to put the new one right after
            var previous = dtMatrix.Columns.IndexOf(previousTC);
            var current = dtMatrix.Columns.IndexOf(tcase.title);
            if (previous >= current)
            {
                dtMatrix.Columns[current].SetOrdinal(previous);
            }
        }
    }
    previousTC = tcase.title;
}