更新 : 2007 年 11 月
EntityDataSource コントロールの Where プロパティは、Entity SQL クエリの述語である WHERE 句を表す文字列です。この文字列は、Object Services によって実行される ObjectQuery<T> にそのまま渡されます。このクエリは、EntityDataSource コントロールによって制御されるデータのソースです。Where プロパティに渡される文字列の形式は、ObjectQuery<T> の Where メソッドに渡される文字列の形式と同じです。WHERE 句を使用してクエリをフィルタ処理する方法の例については、「データをフィルタ選択する方法 (Entity Framework)」を参照してください。
パラメータの引き渡し
ObjectQuery<T> クラスの Where メソッドと同様に、Where プロパティに代入される述語にはパラメータを渡すことができます。EntityDataSource コントロールの WhereParameters プロパティには、クエリの WHERE 句に渡すパラメータを保持する ParameterCollection を指定します。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>