views:

52

answers:

1

Hi, I would like to call a method in the ObjectContext which returns EntityCollection and have it sorted the way I want by default. For example, Imagine I have the following Category table/class:

  • CategoryID (PK)
  • Name
  • ParentID (FK_Category) foreign key pointing to CategoryID itself.

(This table is the base for a tree structure of Categories and SubCategories)

Now, in my data model, the public partial class Category : EntityObject has a property which returns all Categories that have ParentID==CategoryID, in other words, EntityCollection<Category> SubCategories.

Alright, now i want to show in my page all the Categories and SubCategories by using 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>

Then in code behind, I set the DataSource:

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

Simply and everything works! Except that, rptSubCategoryCategories doesn't gives sorted Categories by Name. The only way I found to do it, is to change its DataSource from:

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

to:

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

but I wish I could do something else to have a default sorting so i don't need to call the OrderBy. Something like Attributes like we do in DynamicData, following the tutorial at http://www.asp.net/learn/3.5-SP1/video-291.aspx Setting the default sort column of an Entity with DisplayColumnAttribute. Unless somebody tells me it's impossible what I want to do.

Using .NET 4.0 BETA 2

Thank you, I appreciate any post!

+2  A: 

As far as I'm aware this is not possible.

You could create an additional property called SortedSubCategories

e.g.

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

I'm curious though why is using the OrderBy such an issue?

willbt
Hey willbt! I was expecting that answer, just wanted to make sure that it wasn't possible. I still hope thou somebody prove us wrong. The reason is simply to make the code look prettier, that's all. That you help me in this matter, cause the current approach looks ugly. So thank you very much!
Fabio