按正确顺序获取数据集子行

时间:2008-12-04 11:36:30

标签: c# .net dataset

我在两个表之间输入了1:N关系的数据集。 子表有“Order”列,我将数据加载到数据集时用于SP中的排序(ordery by)。据我所知,使用数据集时无法保证此顺序。 我需要父行的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()时,有更好的方法来确保订单吗?

1 个答案:

答案 0 :(得分: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表达式来对结果数组进行排序