データのプロジェクション (EntityDataSource)
更新 : 2007 年 11 月
Select プロパティを使用すると、EntityDataSource コントロールによって返されるオブジェクトから特定のプロパティを射影できます。EntityDataSource コントロールの Select プロパティには、Entity SQL クエリの SELECT ステートメントを表す文字列が格納されます。実行時に EntityDataSource コントロールにデータを返す ObjectQuery<T> には、この文字列が変更されることなく渡されます。Select プロパティに渡される文字列の形式は、ObjectQuery<T> の Select メソッドに渡される文字列の形式と同じです。SELECT 句を使用してクエリのプロジェクションを定義する方法の例については、「匿名型を返すクエリの実行方法 (Entity Framework)」を参照してください。
メモ : |
---|
射影されたデータに対する更新はサポートされません。Select プロパティを使用してプロジェクションを指定した場合は、データ バインディングで更新がサポートされなくなります。 |
次の XML マークアップでは、Select プロパティを使用し、Product 型の 6 つのプロパティを使ってプロジェクションを指定します。
<asp:EntityDataSource ID="ProductDataSource" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities"
EntitySetName="Product" OrderBy="it.ProductID"
Select="it.ProductID, it.Name, it.ListPrice,
it.Size, it.Style, it.Weight">
</asp:EntityDataSource>
直前の XML の例は、次に示す products という名前の ObjectQuery<T> と同じです。
ObjectQuery<Product> products = context.Product
.Select(it.ProductID, it.Name, it.ListPrice,
it.Size, it.Style, it.Weight)
.OrderBy("it.ProductID");
パラメータの引き渡し
ObjectQuery<T> クラスの Select メソッドと同様に、Select プロパティが定義するプロジェクションにはパラメータを渡すことができます。クエリの SELECT ステートメントに対して ParameterCollection を指定するには、EntityDataSource コントロールの SelectParameters プロパティを定義する必要があります。SelectParameters プロパティでは、名前付き引数を使用して Select プロパティのパラメータを参照します。
SelectParameters プロパティが定義されていないと、パラメータ置換は実行されません。SELECT ステートメント内の "@" 記号で始まるすべてのパラメータ名は、対応する名前が ParameterCollection に存在する必要があります。ParameterCollection のパラメータに null 値は使用できません。
次の例では、クエリで射影されるプロパティの 1 つに対し、パラメータを使用することにより、各 Product に 90% の割引を適用しています。
<asp:EntityDataSource ID="EntityDataSource6" runat="server"
EnableViewState="False"
EntitySetName="Products"
ConnectionString="name=NorthwindContext"
DefaultContainerName="NorthwindContext"
EntityTypeFilter="Products"
Select="it.ProductID, it.UnitsInStock, it.ProductName,
it.UnitPrice * @Discount as UnitPrice,
it.UnitsOnOrder as UnitsOnOrder, it.Discontinued"
Where="it.ProductID < 10"
>
<SelectParameters>
<asp:Parameter Name="Discount" DefaultValue=".90"
Type="Decimal" />
</SelectParameters>
</asp:EntityDataSource>