我有一个 ASP.NET 页面,其中有一个绑定到 EntityDataSource 的 GridView 控件(请参见下面的简化代码)。网格显示Parent
项目列表,并包含一列以显示Children
此父项的 .Count。我可以让网格正确显示计数,但我无法弄清楚 asp:TemplateField SortExpression 值使用什么才能将排序设置为子项的计数。
这是我的代码的样子(为清楚起见进行了简化)...
<asp:EntityDataSource ID="edsParentList" runat="server"
ConnectionString="name=FooEntities"
DefaultContainerName="FooEntities"
EnableFlattening="False"
EntitySetName="Parents"
EntityTypeFilter="Parent"
Include="Children"
OrderBy="it.Name"
Where="(it.Name LIKE '%' + @ParentNameLike + '%')
>
<WhereParameters>
<asp:Parameter Name="ParentNameLike" Type="String" DefaultValue="_" />
</WhereParameters>
</asp:EntityDataSource>
<asp:GridView ID="grdParents" runat="server"
AllowPaging="True"
AllowSorting="True"
AutoGenerateColumns="False"
DataSourceID="edsParentList"
PageSize="20"
onpageindexchanged="grdParents_PageIndexChanged" onsorted="grdParents_Sorted" >
<Columns>
<asp:TemplateField HeaderText="Name" SortExpression="Name">
<ItemTemplate>
<a href="Parent.aspx?id=<%# Eval("ParentID") %>"><%# Eval("Name") %></a>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="BirthDate" HeaderText="Birth Date"
DataFormatString="{0:yyyy-MM-dd HH:mm}"
SortExpression = "BirthDate" />
<asp:TemplateField HeaderText="Children" SortExpression="Children.Count">
<ItemTemplate>
<asp:Label ID="lblChildCount" runat="server"
Text='<%# Eval("Children.Count") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
这显示网格很好。但是,当我单击 Children 列的标题时,会引发此错误:
“Count”不是“Transient.collection[FooEntities.Child(Nullable=True,DefaultValue=)]”的成员。要提取集合元素的属性,请使用子查询来迭代集合。
我的问题是:如何在包含子对象集合的导航属性的 .Count() 上启用排序?
有没有办法用 SortExpression 指定它,还是我必须分解并手动进行所有分页和排序?(我显然更愿意避免!)