Могу ли я получить пользовательскую сортировку коллекции EntityColme по умолчанию в EntityFramework? - PullRequest
3 голосов
/ 15 января 2010

Я хотел бы вызвать метод в ObjectContext, который возвращает EntityCollection и отсортировать его так, как я хочу по умолчанию. Например, представьте, что у меня есть следующая Category таблица / класс:

  • CategoryID (PK)
  • Имя
  • ParentID (FK_Category) внешний ключ указывая на саму CategoryID.

(Эта таблица является основой для древовидной структуры категорий и подкатегорий)

Теперь, в моей модели данных, public partial class Category : EntityObject имеет свойство, которое возвращает все Категории, имеющие ParentID == CategoryID, другими словами, EntityCollection<Category> SubCategories.

Хорошо, теперь я хочу показать на своей странице все категории и подкатегории с помощью повторителя:

<asp:Repeater ID="rptSubCategories" runat="server">
<ItemTemplate>
    <%# Eval("CategoryID") %> - <%# Eval("Name") %>

    <asp:Repeater ID="rptSubCategoryCategories" runat="server" DataSource='<%#Eval("SubCategories")) %>'>
    <ItemTemplate>
        <%# Eval("CategoryID") %> - <%# Eval("Name") %>
    </ItemTemplate>
    </asp:Repeater>

</ItemTemplate>
</asp:Repeater>

Затем в коде я установил источник данных:

IList<Category> categoryList = new CategoryProvider().GetAll();
rptSubCategories.DataSource = categoryList;
rptSubCategories.DataBind();

Просто и все работает! Кроме того, rptSubCategoryCategories не дает отсортированные категории по имени. Единственный способ, который я нашел, это изменить его источник данных с:

DataSource='<%# Eval("SubCategories")) %>'

до:

DataSource='<%# ((EntityCollection<Category>)Eval("SubCategories")).OrderBy(p => p.Name) %>'

но я бы хотел сделать что-то еще для сортировки по умолчанию, поэтому мне не нужно вызывать OrderBy. Что-то вроде атрибутов, как мы делаем в DynamicData, следуя инструкциям в http://www.asp.net/learn/3.5-SP1/video-291.aspx Установка столбца сортировки по умолчанию для сущности с помощью DisplayColumnAttribute. Если кто-то не скажет мне, что я не могу сделать это невозможно.

Использование .NET 4.0 BETA 2

Спасибо, я ценю любой пост!

1 Ответ

3 голосов
/ 15 января 2010

Насколько я знаю, это невозможно.

Вы можете создать дополнительное свойство с именем SortedSubCategories

например.

      public EntityCollection<Category> SortedSubCategories
        {
            get
            {
                return SubCategories.OrderBy(p => p.Name);
            }
        }

Мне интересно, почему использование OrderBy является такой проблемой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...