我可以在EntityFramework中默认获得自定义排序的EntityCollection吗?

时间:2010-01-15 20:26:31

标签: c# asp.net entity-framework attributes

我想在ObjectContext中调用一个返回EntityCollection的方法,并按默认方式对其进行排序。例如,想象一下,我有以下Category表/类:

  • CategoryID(PK)
  • 名称
  • ParentID(FK_Category)外键 指向CategoryID本身。

(此表是Categories和SubCategories的树结构的基础)

现在,在我的数据模型中,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>

然后在代码后面,我设置了DataSource:

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。类似于我们在DynamicData中执行的属性,遵循http://www.asp.net/learn/3.5-SP1/video-291.aspx中的教程 使用DisplayColumnAttribute设置实体的默认排序列。除非有人告诉我,我不想做什么。

使用.NET 4.0 BETA 2

谢谢,我感谢任何帖子!

1 个答案:

答案 0 :(得分:3)

据我所知,这是不可能的。

您可以创建一个名为SortedSubCategories

的附加属性

e.g。

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

我很好奇为什么使用OrderBy这样的问题呢?