2009-03-26 6 views
0

Если у меня есть вложенный ListView, и я вызываю связанную таблицу в LinQ, как мне его сортировать, не прибегая к событию ItemDataBound родителя?Могу ли я определить порядок сортировки по умолчанию в LinQ

псевдокоде (ОБНОВЛЕНО раствором):

<asp:ListView ID="lv" runat="server" OnItemDataBound="lv_ItemDataBound" > 
    <LayoutTemplate> 
     <!-- Product Category Stuff --> 
     <asp:PlaceHolder Id="itemPlaceholder" runat="server"></asp:PlaceHolder> 
    </LayoutTemplate> 

    <ItemTemplate> 
     <asp:ListView ID="lvInner" runat="server" DataSource='<%# <%# ((Category)Container.DataItem).Products.OrderBy(p => p.Description) %> %>'> 
     <LayoutTemplate> 
      <ul> 
       <asp:PlaceHolder ID="itemPlaceholder" runat="server"></asp:PlaceHolder> 
      </ul> 
     </LayoutTemplate> 
     <ItemTemplate> 
      <li>Item Stuff</li> 
     </ItemTemplate> 
     </asp:ListView> 
    </ItemTemplate> 
</asp:ListView> 

Возможно, метод обманчиво прост, но я хочу, чтобы внутренние продукты быть отсортированы по полю. Я не вижу способ сделать это декларативно, поскольку LinQ создает этот запрос «на лету», если я не ошибаюсь и не сортирую.

Любые мысли?

UPDATE

Обновленного пример следующий:

<%# ((Category)Container.DataItem).Products.OrderBy(p => p.Description) %> 

Надеется, что это помогает кто-то другое!

ответ

5

Мое предположение заключается в том, что Products является IEnumerable<Product> (или IQueryable). Если это так, то почему бы не просто добавить метод OrderBy к оценке, например, так:

<%# Eval("Products.OrderBy(p => p.FieldToSortOn)") %> 
+0

Это может звучать глупо ... но я даже не думал о том, что ... или быть более точным ... Я не понимал, что ты можешь это сделать. Благодарю. Тестирование сейчас. – Armstrongest

+0

На втором взгляде это не представляется возможным. Могу ли я использовать Eval для оценки выражения строк? Я получаю эту ошибку: DataBinding: «OrderBy (p => p» не является допустимым индексированным выражением. – Armstrongest

+0

GOT IT! То же самое, но я сделал это следующим образом: <% # ((Категория) Container.DataItem). Продукты.OrderBy (p => p.Description)%> Кажется, нужно работать! – Armstrongest

Смежные вопросы