Linq to Sql(.net 3.5)中是否有一种方法可以指定当您获得特定记录的子项时,以强制子项列表以特定顺序返回?

例如,我有一个上面带有“ DisplayOrder”的列表。当我向我的父记录/对象询问返回该列表的属性时,我希望Linq to Sql为我检索记录,但按“ DisplayOrder”排序。

是否可以在不总是写如下内容的情况下执行此操作:

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


我的主意是为我的对象创建一个局部类,并添加一个“ OrderedChildren”属性来封装此调用。但是,我想知道是否可以在dbml中指定某些内容来强制执行此操作。

最佳答案

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

10-06 00:37