篩選資料 (EntityDataSource)
更新:2007 年 11 月
EntityDataSource 控制項的 Where 屬性為表示 WHERE 子句 (Entity SQL 查詢述詞) 的字串。這個字串不會經過任何修改,且會傳入由物件服務執行的 ObjectQuery<T>。這個查詢為由 EntityDataSource 控制項所規範的資料查詢。指定給 Where 屬性的字串使用的格式,與傳遞給 ObjectQuery<T> 之 Where 方法的字串相同。如需使用 WHERE 子句篩選查詢的範例,請參閱 HOW TO:篩選資料 (Entity Framework)。
傳遞參數
與 ObjectQuery<T> 類別的 Where 方法類似,參數可以傳入指派給 Where 屬性的述詞。EntityDataSource 控制項的 WhereParameters 屬性會指定包含要提供給查詢中 WHERE 子句之參數的 ParameterCollection。WhereParameters 屬性會使用具名引數,參考提供給 Where 屬性之字串中指定的參數。
如果沒有設定 WhereParameters 屬性,則不會產生參數替代。WHERE 子句中所有參數名稱,如果前置字元符號為 "@",,在 ParameterCollection 中都必須有一個對應的名稱。ParameterCollection 中的參數不允許為 Null 的值。
範例
下列範例中的 XML 標記在 .aspx 檔案中,會從控制項擷取值,並將其傳入 Where 屬性做為參數。
<asp:EntityDataSource ID="SalesOrderHeader"
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"
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>