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 回答