資料投影 (EntityDataSource)
更新:2007 年 11 月
您可以使用 Select 屬性,從 EntityDataSource 控制項傳回的物件投影特定屬性。EntityDataSource 控制項的 Select 屬性包含表示 Entity SQL 查詢中 SELECT 陳述式的字串。這個字串不會經過任何修改,且會傳遞給 ObjectQuery<T>,這個物件執行時,會傳回資料給 EntityDataSource 控制項。指定給 Select 屬性的字串使用的格式,與傳遞給 ObjectQuery<T> 之 Select 方法的字串相同。如需 SELECT 子句定義查詢投影的使用範例,請參閱 HOW TO:執行傳回匿名型別的查詢 (Entity Framework)。
![]() |
---|
不支援投影資料的更新。使用 Select 屬性指定投影時,資料繫結不支援更新。 |
下列 XML 標記使用 Select 屬性,利用 Product 型別中的 6 種屬性指定資料投影。
<asp:EntityDataSource ID="ProductDataSource"
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 屬性定義的資料投影。您必須定義 EntityDataSource 控制項的 SelectParameters 屬性,才能夠指定查詢中 SELECT 陳述式的 ParameterCollection。SelectParameters 屬性會使用具名引數,參考 Select 屬性中的參數。
如果沒有定義 SelectParameters屬性,則不會產生參數替代。SELECT 陳述式中所有參數名稱,如果前置字元符號為 "@",,在 ParameterCollection 中都必須有一個對應的名稱。ParameterCollection 中的參數不允許為 Null 的值。
以下範例在其中一個屬性投影上使用參數,將 9 折的折扣套用到查詢中的每一筆 Product。
<asp:EntityDataSource ID="EntityDataSource6"
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>