更新:2007 年 11 月
可以使用 Select 属性来投影 EntityDataSource 控件返回的对象的特定属性。EntityDataSource 控件的 Select 属性包含一个字符串,该字符串表示实体 SQL 查询的 SELECT 语句。该字符串不经修改即传递到 ObjectQuery<T>,后者在执行后,会将数据返回给 EntityDataSource 控件。提供给 Select 属性的字符串与传递给 ObjectQuery<T> 的 Select 方法的字符串使用相同的格式。有关如何使用 SELECT 子句为查询定义投影的示例,请参见如何:执行返回匿名类型的查询 (Entity Framework)。
![]() |
---|
投影的数据不支持更新。使用 Select 属性指定投影时,数据绑定不支持更新。 |
以下 XML 标记使用 Select 属性指定具有 Product 类型的六个属性的投影:
<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 属性定义的投影传递参数。必须定义 EntityDataSource 控件的 SelectParameters 属性,以便为查询的 SELECT 语句指定 ParameterCollection。SelectParameters 属性使用命名变量来引用 Select 属性中的参数。
如果未定义 SelectParameters 属性,将不进行任何参数替换。SELECT 语句中的所有参数名称(以“@”符号为前缀)都必须在 ParameterCollection 中有匹配的名称。对于 ParameterCollection 中的参数,不允许使用 Null 值。
在下面的示例中,通过对其中一个属性投影使用参数,对查询中的每个 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>