Фильтрация данных (EntityDataSource)
Обновлен: Ноябрь 2007
Свойство Where элемента управления EntityDataSource — это строка, представляющая предложение WHERE, которое является предикатом запроса Entity SQL. Эта строка передается без изменений объекту ObjectQuery<T>, выполняемому службами объектов. Этот запрос является источником данных, которым управляет элемент управления EntityDataSource. Строка, заданная в свойстве Where, имеет такой же формат, что и строка, передаваемая методу Where объекта ObjectQuery<T>. Пример применения предложения WHERE для фильтрации результатов запроса см. в разделе Практическое руководство. Фильтрация данных (Entity Framework).
Передача параметров
Как и в случае с методом Where класса ObjectQuery<T>, можно передавать параметры предикату, присвоенному свойству Where. Свойство WhereParameters элемента управления EntityDataSource задает коллекцию ParameterCollection, содержащую параметры для предложения WHERE запроса. Свойство WhereParameters использует именованные аргументы для ссылки на параметры, заданные в строке, указанной в свойстве Where.
Если свойство WhereParameters не задано, подстановка параметров не выполняется. Всем именам параметров в предложении WHERE, имеющим префикс в виде символа "@", должны соответствовать имена в ParameterCollection. Для параметров, заданных в ParameterCollection, значение null не допускается.
Пример
В следующем примере XML-разметка в ASPX-файле извлекает значение из элемента управления и передает его как параметр свойству Where.
<asp:EntityDataSource ID="SalesOrderHeader" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" OrderBy="it.TotalDue DESC" Select=""
Where="it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost">
<WhereParameters>
<asp:ControlParameter ControlID="costLimit" DbType="Int32"
DefaultValue="2500" Name="ordercost" PropertyName="Text" />
</WhereParameters>
</asp:EntityDataSource>
Предыдущий пример XML эквивалентен следующему ObjectQuery<T> с именем onlineOrders:
ObjectQuery<SalesOrderHeader> onlineOrders =
context.SalesOrderHeader
.Where("it.OnlineOrderFlag = TRUE AND it.TotalDue > @ordercost",
new ObjectParameter("ordercost", orderCost))
.OrderBy("it.TotalDue DESC");
Автоматическое создание предложения WHERE
Когда свойство AutoGenerateWhereClause элемента управления EntityDataSource имеет значение true, элемент управления автоматически генерирует предложение WHERE на основе параметров в коллекции ParameterCollection, присвоенной свойству WhereParameters. Тем самым устраняется необходимость явного присваивания предложения WHERE свойству Where. Составление предложения WHERE на основе значения свойства WhereParameters требует, чтобы свойство Name каждого параметра в коллекции идентифицировало единственное свойство элемента, возвращенного из запроса.
Пример
В следующем примере предполагается, что флажок устанавливает сетевой флаг упорядочения.
<asp:EntityDataSource ID="SalesOrderHeader" runat="server"
ConnectionString="name=AdventureWorksEntities"
DefaultContainerName="AdventureWorksEntities" EnableDelete="True"
EnableInsert="True" EnableUpdate="True" EntitySetName="SalesOrderHeader"
EntityTypeFilter="" Select="" AutoGenerateWhereClause="True">
<WhereParameters>
<asp:ControlParameter ControlID="onlineOrder" DefaultValue="true"
Name="OnlineOrderFlag" PropertyName="Text" DbType="Boolean" />
</WhereParameters>
</asp:EntityDataSource>
См. также
Основные понятия
Настройка элемента управления EntityDataSource