Linq to Sql Force Order By

2

Есть ли способ в Linq to Sql (.net 3.5) указать, что когда вы получаете детей определенной записи, чтобы заставить список детей вернуться в определенном порядке?

Например, у меня есть список, на котором есть "DisplayOrder". Когда я запрашиваю родительскую запись/объект для этого свойства, который возвращает мне этот список, я хочу, чтобы Linq to Sql извлекал для меня записи, но упорядочивался с помощью "DisplayOrder".

Можно ли это сделать, не записывая что-то вроде:

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

Идея с моей головы - создать частичный класс для моего объекта и добавить свойство "OrderedChildren", которое инкапсулирует этот вызов. Интересно, хотя, если я не могу указать в dbml, чтобы заставить это.

Теги:
linq
linq-to-sql
.net-3.5

1 ответ

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
    Спрашивала, есть ли способ, которым я могу манипулировать dbml для выполнения этого действия каждый раз, когда я загружаю дочерние записи для «MyObject». Сортировка установки порядка сортировки загрузки по умолчанию.
  • 0
    Это может быть не напрямую в dbml, но теперь оно должно решить вашу проблему. Может быть способ убедиться, что это происходит только при запросе таблицы MyObjects , но я пока не нашел ее.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню