Я хотел бы вызвать метод в 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
Спасибо, я ценю любой пост!