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
。