Какой самый простой способ отсортировать коллекцию EF4 EntityCollection<T>?

Я хотел бы добавить некоторую сортировку к EntityCollection, которая связана с ItemsControl (в xaml). Я также хотел бы сделать это как можно проще. Похоже, что это невозможно.

Если я оберну коллекцию в "отсортированную" версию свойства коллекции внутри сущности, я потеряю уведомления об изменениях коллекции. Я не могу использовать CollectionViewSource, потому что BindingListCollectionView коллекции сущностей не поддерживает сортировку по какой-то проклятой причине (примечание: я видел сообщение в блоге с "грязным" хаком, чтобы обойти это, поэтому, пожалуйста, не отвечайте с этим kthx).

Есть ли простой (пара строк xaml, пара строк кода, что угодно) способ добиться этого??

1 ответ

Решение

Тип EntityCollection не может быть напрямую отфильтрован или отсортирован. Это распространенная проблема LINQ-to-Entities, см. Сортировка дочерних объектов при выборе родителя с использованием LINQ-to-Entities.

Одним из решений будет сортировка коллекции сущностей по отдельности с помощью LINQ, когда вам нужны данные, и дополнительный удар по производительности. Если вы работаете с коллекцией, которую вы планируете использовать в небольших объемах и / или использовать редко, разница во времени обработки может быть незначительной.

Если вы хотите, чтобы база данных выполняла сортировку и использовала какие-либо индексы, вы можете проецировать основной объект вместе с дочерними объектами. Алекс Джеймс публикует пример в своем блоге MSDN: http://blogs.msdn.com/b/alexj/archive/2009/02/25/tip-1-sorting-relationships-in-entity-framework.aspx. Конечно, вы не ограничены анонимными типами.

Другие вопросы по тегам