在Linq to Sql(.net 3.5)中是否有一种方法可以指定当您获取特定记录的子项时,强制子项列表按特定顺序返回?
例如,我有一个包含“DisplayOrder”的列表。当我问我的父记录/对象的属性是否返回给我这个列表时,我希望Linq to Sql为我检索记录,但是由“DisplayOrder”命令。
是否可以在不写总是这样的情况下这样做:
MyObject.Children.OrderBy(c => c.DisplayOrder);
我的头脑中的一个想法是为我的对象创建一个部分类,并添加一个封装此调用的“OrderedChildren”属性。但是想知道,如果没有我可以在dbml中指定的东西来强迫它。
答案 0 :(得分: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
。