筛选数据 (EntityDataSource)

更新: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 &gt; @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>

请参见

概念

配置 EntityDataSource 控件

EntityDataSource 设计器

其他资源

对象服务概述 (Entity Framework)

查询生成器方法 (Entity Framework)