数据投影 (EntityDataSource)

更新:2007 年 11 月

可以使用 Select 属性来投影 EntityDataSource 控件返回的对象的特定属性。EntityDataSource 控件的 Select 属性包含一个字符串,该字符串表示实体 SQL 查询的 SELECT 语句。该字符串不经修改即传递到 ObjectQuery<T>,后者在执行后,会将数据返回给 EntityDataSource 控件。提供给 Select 属性的字符串与传递给 ObjectQuery<T>Select 方法的字符串使用相同的格式。有关如何使用 SELECT 子句为查询定义投影的示例,请参见如何:执行返回匿名类型的查询 (Entity Framework)

Cc488524.alert_note(zh-cn,VS.90).gif说明:

投影的数据不支持更新。使用 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 语句指定 ParameterCollectionSelectParameters 属性使用命名变量来引用 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>

请参见

概念

EntityDataSource 设计器

其他资源

使用 EntityDataSource 选择数据

对象查询 (Entity Framework)