4

アソシエーションのグループをリストしようとしています。各アソシエーション内には、アソシエーションに割り当てられた「ウィジェット」があります。リストには、アソシエーション名とそれに割り当てられたウィジェットが含まれます。問題は、内側のウィジェット リストを DisplaySequence でソートする必要があることです。

以下の EDMX モデル: EDMX モデル

リピーターマークアップの簡素化

<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();

現在、現在のセットアップで探しているデータを取得できます。これと同じデータを取得するための最も効率的な方法を探していますが、ウィジェットを正しい表示順序でリストします。

私が取るべきlinqクエリへの別のアプローチはありますか?

4

1 に答える 1

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)
       }
    );

ここでは、匿名型のコレクションを取得します。次のような具象型を使用できます

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

必要に応じ 'new {''new AssociationInfo {'

于 2013-03-28T13:41:34.813 に答える