EntityDataSource にバインドされた GridView コントロールを含む ASP.NET ページがあります (以下の簡略化されたコードを参照)。グリッドにはアイテムのリストが表示され、この親Parent
の .Count を表示する列が含まれています。Children
グリッドにカウントを適切に表示させることはできますが、並べ替えを子のカウントに設定できるように 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 で指定する方法はありますか、それとも分解してすべてのページングとソートを手動で行う必要がありますか? (これは明らかに避けたいと思います!)