更新:2007 年 11 月
EntityDataSource 控件的 Where 属性是一个表示 WHERE 子句的字符串,该子句是实体 SQL 查询的谓词。该字符串未经修改即传递到由对象服务执行的 ObjectQuery<T>。此查询是 EntityDataSource 控件所控制数据的源。提供给 Where 属性的字符串与传递给 ObjectQuery<T> 的 Where 方法的字符串具有相同的格式。有关如何使用 WHERE 子句筛选查询的示例,请参见如何筛选数据 (Entity Framework)。
传递参数
与 ObjectQuery<T> 类的 Where 方法相似,可以向赋给 Where 属性的谓词传递参数。EntityDataSource 控件的 WhereParameters 属性指定一个 ParameterCollection,该集合中包含要提供给此查询的 WHERE 子句的参数。WhereParameters 属性使用命名参数,来引用在提供给 Where 属性的字符串中指定的参数。
如果未设置 WhereParameters 属性,则将不进行任何参数替换。WHERE 子句中所有以“@”符号为前缀的参数,在 ParameterCollection 中都必须有一个匹配的名称。对于 ParameterCollection 中的参数,不允许使用 Null 值。
示例
在下面的示例中,.aspx 文件中的 XML 标记从控件中检索值,并将该值作为一个参数传递给 Where 属性。
<asp:EntityDataSource ID="SalesOrderHeader" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" OrderBy="it.TotalDue DESC" Select=""
Where="it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost">
<WhereParameters>
<asp:ControlParameter ControlID="costLimit" DbType="Int32"
DefaultValue="2500" Name="ordercost" PropertyName="Text" />
</WhereParameters>
</asp:EntityDataSource>
上面的 XML 示例与下面的名为 onlineOrders 的 ObjectQuery<T> 等效:
ObjectQuery<SalesOrderHeader> onlineOrders =
context.SalesOrderHeader
.Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
new ObjectParameter("ordercost", orderCost))
.OrderBy("it.TotalDue DESC");
自动生成 WHERE 子句
当 EntityDataSource 控件的 AutoGenerateWhereClause 属性设置为 true 时,该控件会根据赋给 WhereParameters 属性的 ParameterCollection 中的参数自动生成 WHERE 子句。这样就无需将 WHERE 子句显式赋给 Where 属性。WhereParameters 属性的 WHERE 子句的构造要求:集合中每个参数的 Name 属性可以标识从查询返回的项的单个属性。
示例
下面的示例假定有一个复选框设置联机订单标志:
<asp:EntityDataSource ID="SalesOrderHeader" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" Select="" AutoGenerateWhereClause="True">
<WhereParameters>
<asp:ControlParameter ControlID="onlineOrder" DefaultValue="true"
Name="OnlineOrderFlag" PropertyName="Text" DbType="Boolean" />
</WhereParameters>
</asp:EntityDataSource>