【问题标题】:Linq to Sql Force Order ByLinq to Sql 强制排序依据
【发布时间】:2010-11-17 08:14:41
【问题描述】:

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

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

是否有可能做到这一点而不总是写这样的东西:

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

我的一个想法是为我的对象创建一个部分类并添加一个封装此调用的“OrderedChildren”属性。不过想知道,如果没有我可以在 dbml 中指定的东西来强制执行此操作。

【问题讨论】:

    标签: c# .net linq linq-to-sql .net-3.5


    【解决方案1】:

    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 在运行其他查询之前永远不会被覆盖。

    【讨论】:

    • 每次我加载“MyObject”的子记录时,我都在询问是否有一种方法可以操纵 dbml 来执行此操作。排序设置默认加载排序顺序。
    • 这可能不直接在 dbml 中,但它现在应该可以解决您的问题。可能有一种方法可以确保仅在查询MyObjects 表时发生这种情况,但我还没有找到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2013-08-05
    相关资源
    最近更新 更多