Получить дочерние строки набора данных в правильном порядке - PullRequest
2 голосов
/ 04 декабря 2008

Я набрал набор данных с соотношением 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 ()?

1 Ответ

1 голос
/ 04 декабря 2008

Вы можете попробовать отсортировать дочернюю таблицу, прежде чем выбрать строки из нее. Таким образом, мы надеемся, что массив будет предварительно отсортирован при выборе строк из него.

Например:

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 для сортировки полученного массива

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...