我想在ObjectContext
中调用一个返回EntityCollection
的方法,并按默认方式对它进行排序。例如,假设我有以下Category
表/类:
分类ID(PK)
名称
ParentID(FK_Category)外键
指向CategoryID本身。
(此表是类别和子类别的树结构的基础)
现在,在我的数据模型中,public partial class Category : EntityObject
具有一个属性,该属性返回所有具有ParentID == CategoryID(即EntityCollection<Category> SubCategories
)的类别。
好了,现在我想使用Repeater在我的页面中显示所有类别和子类别:
<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从以下位置更改:DataSource='<%# Eval("SubCategories")) %>'
至:
DataSource='<%# ((EntityCollection<Category>)Eval("SubCategories")).OrderBy(p => p.Name) %>'
但我希望我可以做其他事情以使默认排序有效,所以我不需要调用OrderBy。遵循http://www.asp.net/learn/3.5-SP1/video-291.aspx上的教程,就像我们在DynamicData中所做的Attributes一样
使用DisplayColumnAttribute设置实体的默认排序列。除非有人告诉我,我要做什么是不可能的。
使用.NET 4.0 BETA 2
谢谢,我感谢任何帖子!
最佳答案
据我所知这是不可能的。
您可以创建一个名为SortedSubCategories的附加属性。
例如
public EntityCollection<Category> SortedSubCategories
{
get
{
return SubCategories.OrderBy(p => p.Name);
}
}
我很好奇,为什么为什么要使用OrderBy这样的问题?