2009-08-06 109 views
2

Linq to Sql(.net 3.5)有沒有辦法指定當你得到特定記錄的子項時,強制子項列表以特定順序返回?Linq to Sql Force Order By

例如,我有一個列表上有一個「DisplayOrder」。當我向我的父記錄/對象詢問它的​​屬性返回給我這個列表時,我希望Linq to Sql爲我檢索記錄,但是按「DisplayOrder」排序。

是否有可能做到這一點不總是寫一樣的東西:

MyObject.Children.OrderBy(c => c.DisplayOrder); 

了我的頭頂部的想法是創造我的對象部分類,並添加一個「OrderedChildren」屬性,它封裝此呼叫。想知道的是,如果沒有我可以在dbml中指定來強制執行此操作。

回答

4

DataLoadOptions.AssociateWith()方法將過濾所有對象的某種關係。這包括Where(),OrderBy(),ThenBy(),OrderByDescending()ThenByDescending()Take()

可以部分方法內的DataContext像下面這樣使用:

partial class ExampleDataContext 
{ 
    partial void OnCreated() 
    { 
     DataLoadOptions dlo = new DataLoadOptions(); 
     dlo.AssociateWith<MyObject>(i => i.Children.OrderBy(c => c.DisplayOrder)); 
     LoadOptions = dlo; 
    } 
} 

你要確保LoadOptions從來沒有之前運行的其他查詢重寫。

+0

詢問是否有方法可以在每次加載「MyObject」的子記錄時操作dbml來執行此操作。排序設置默認加載排序順序。 – Brian 2009-08-11 12:23:57

+0

這可能不是直接在dbml中,但它現在應該照顧你的問題。可能有一種方法可以確保只有在查詢「MyObjects」表時纔會發生這種情況,但我還沒有發現它。 – 2009-08-11 14:21:12