更新:2007 年 11 月
可以使用 OrderBy 属性对 EntityDataSource 控件中的结果进行排序。EntityDataSource 控件的 OrderBy 属性是一个字符串,该字符串表示实体 SQL 查询的 ORDER BY 表达式。该字符串不经修改即传递到 ObjectQuery<T>,后者充当 EntityDataSource 控件的数据源。提供给 OrderBy 属性的字符串与传递给 ObjectQuery<T> 的 OrderBy 方法的字符串使用相同的格式。有关如何使用 ORDER BY 子句对查询结果进行排序的示例,请参见如何:对数据进行排序 (Entity Framework)。
传递参数
与 ObjectQuery<T> 类的 OrderBy 方法一样,可以在 OrderBy 属性中向 ORDER BY 子句传递参数。必须定义 EntityDataSource 控件的 OrderByParameters 属性,以便为查询的 ORDER BY 子句指定 ParameterCollection。OrderByParameters 属性使用命名变量来引用在 OrderBy 属性中分配的参数。
如果未定义 OrderByParameters 属性,将不进行任何参数替换。ORDER BY 子句中的参数名称(以“@”符号为前缀)必须在 ParameterCollection 中有匹配的名称。对于 ParameterCollection 中的参数,不允许使用 Null 值。
自动生成 ORDER BY 子句
可以通过将 EntityDataSource 控件的 AutoGenerateOrderByClause 属性设置为 true 来自动生成 ORDER BY 子句。随后,EntityDataSource 控件会基于分配给 OrderByParameters 属性的 ParameterCollection 中的参数自动生成 ORDER BY 子句。这样就无需将 ORDER BY 子句显式分配给 OrderBy 属性。基于 OrderByParameters 属性自动生成 ORDER BY 子句时,必须验证集合中参数的 Name 属性是否标识从查询返回的项的单个属性。
示例
下面的示例自动生成 ORDER BY 子句并使用 orderByDropDownList 的值设置参数的值。
<asp:EntityDataSource ID="SalesOrderHeader" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
Where="it.OnlineOrderFlag = true" AutoGenerateOrderByClause="True">
<OrderByParameters>
<asp:ControlParameter Name="OrderByParameter"
ControlID="orderByDropDownList" Type="String" />
</OrderByParameters>
</asp:EntityDataSource>