【问题标题】:Get dataset child rows in proper order以正确的顺序获取数据集子行
【发布时间】:2010-09-25 07:31:01
【问题描述】:

我在两个表之间输入了具有 1:N 关系的数据集。 子表有“顺序”列,我在将数据加载到数据集中时用于在 SP 中进行排序(排序依据)。据我了解,使用数据集时无法保证此顺序。 我需要父行的 GetChildRows 并确保行按顺序列中定义的特定顺序。 现在我执行以下操作:

class Program
{
    static void Main(string[] args)
    {
        DataSet1 ds = new DataSet1();
        //load data
        DataSet1.ParentTableRow parentRow = ds.ParentTable.FindByID(1);
        DataSet1.ChildTableRow[] childRows = parentRow.GetChildTableRows();
        Array.Sort<DataSet1.ChildTableRow>(childRows, new ChildTableCoparer());
        //Enumerate fields is right order
    }
}

public class ChildTableCoparer : IComparer<DataSet1.ChildTableRow>
{
    public int Compare(DataSet1.ChildTableRow x, DataSet1.ChildTableRow y)
    {
        if (x.Order > y.Order) return 1;
        if (x.Order < y.Order) return -1;
        return 0;
    }
}

在使用 GetChildRows() 时有没有更好的方法来确保顺序?

【问题讨论】:

    标签: c# .net dataset


    【解决方案1】:

    您可以在从中选择行之前尝试对子表进行排序。这样,当您从中选择行时,希望数组将被预先排序。

    例如:

    DataSet1 ds = new DataSet1();
    
    //load data
    DataSet1.ChildTable.SortExpression = "Order";
    
    DataSet1.ParentTableRow parentRow = ds.ParentTable.FindByID(1);
    DataSet1.ChildTableRow[] childRows = parentRow.GetChildTableRows();
    Array.Sort<DataSet1.ChildTableRow>(childRows, new ChildTableCoparer());
    //Enumerate fields is right order    
    

    或者,您可以编写一个 LINQ 表达式来对结果数组进行排序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-29
      相关资源
      最近更新 更多