2013-03-28 63 views
4

我正在嘗試列出一組關聯,每個關聯內部都有一個分配給該關聯的「小部件」。該列表將包括關聯名稱和分配給它的任何小部件。問題在於內部控件列表需要按DisplaySequence進行排序。使用LINQ查詢排序內部中繼器

EDMX型號下面: EDMX Model

簡體直放站加價

<asp:Repeater ID="rptAssociations" runat="server"> 
    <ItemTemplate>  
     <div data-type="assn" id="<%# ((Association)Container.DataItem).AssociationID %>"> 
      <h3 style="margin-top:15px;"><%# ((Association)Container.DataItem).Acronym %> - <%# ((Association)Container.DataItem).Name %></h3> 
      <asp:Repeater runat="server" ID="rptWidgets" DataSource="<%# ((Association)Container.DataItem).AssociationWidgets %>" > 
       <HeaderTemplate>     
        <ul class="WidgetList"> 
       </HeaderTemplate> 
       <ItemTemplate> 
        <li id="<%# ((AssociationWidget)Container.DataItem).DisplaySequence %>"><%# ((AssociationWidget)Container.DataItem).Widget.Name %></li> 
       </ItemTemplate> 
       <FooterTemplate> 
        </ul> 
       </FooterTemplate> 
      </asp:Repeater> 
     </div>  
    </ItemTemplate> 
</asp:Repeater> 

當前查詢

var associations = (from a in 
    context.Associations.Include("AssociationWidgets") 
         .Include("AssociationWidgets.Widget") 
    orderby a.Acronym 
    select a).ToList(); 

rptAssociations.DataSource = associations; 
rptAssociations.DataBind(); 

我目前能夠得到的d我正在尋找我現在擁有的設置。我正在尋找最有效的方法來獲取相同的數據,但是,按照正確的顯示順序列出了Widget。

是否有不同的方法來檢查linq查詢?

回答

3

我會處理這像這樣(未經):

var associations = 
    context.Associations.Select(a => 
     new { 
      //... specific properties you need 
      AssociationId = a.AssociationId, 
      Name = a.Name, 
      ... etc 
      Widgets = a.AssociateWidgets.OrderBy(aw => aw.DisplaySequence) 
             .Select(aw => aw.Widget) 
     } 
    ); 

在這裏,你會得到匿名類型的集合。您可以通過使用'new AssociationInfo {'

更換 'new {'用一個具體的類型,如

public class AssociationInfo 
{ 
    public string Name {get;set;} 
    ... 
    public IEnumerable<Widget> Widgets{ get;set; } 
} 

如果有必要