2008-12-04 28 views
2

我已經鍵入了兩個表之間具有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

在從中選擇行之前,您可以嘗試對子表進行排序。這樣希望陣列在您從中選擇行時進行預先排序。

例如:

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表達式到所得的數組進行排序