Проекции данных (EntityDataSource)
Обновлен: Ноябрь 2007
Можно проектировать определенные свойства объектов, возвращаемых элементом управления EntityDataSource с использованием свойства Select. Свойство Select элемента управления EntityDataSource содержит строку, представляющую инструкцию SELECT запроса Entity SQL. Эта строка передается без изменений объекту ObjectQuery<T>, который при выполнении возвращает данные элементу управления EntityDataSource. Строка, заданная в свойстве Select, имеет такой же формат, что и строка, передаваемая методу Select объекта ObjectQuery<T>. Примеры использования предложения 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 аналогичен следующему ObjectQuery<T> с именем products.
ObjectQuery<Product> products = context.Product
.Select(it.ProductID, it.Name, it.ListPrice,
it.Size, it.Style, it.Weight)
.OrderBy("it.ProductID");
Передача параметров
Как и в случае с методом Select класса ObjectQuery<T>, можно передавать параметры проекции, определяемой свойством Select. Необходимо определить свойство SelectParameters элемента управления EntityDataSource, чтобы указать ParameterCollection для инструкции SELECT в запросе. Свойство SelectParameters использует именованные аргументы для ссылки на параметры в свойстве Select.
Если свойство SelectParameters не определено, подстановка параметров не выполняется. Всем именам параметров в инструкции SELECT, имеющим префикс в виде символа "@", должны соответствовать имена в ParameterCollection. Для параметров, заданных в ParameterCollection, значение null не допускается.
В следующем примере применяется скидка 90% для каждого элемента Product в запросе с использованием параметра одной из проекций свойства.
<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>