Запросы: извлечение сведений из источника данных.
Запрос используется для возврата данных, удовлетворяющих заданному набору критериев. Например, если требуется узнать количество клиентов, живущих в США, создается запрос, сканирующий список клиентов и проверяющий страну и регион, указанные в их адресе.
Можно создавать запросы и сохранять их в модели приложения. Условия поиска можно задавать с помощью конструктора запросов. Если возможностей конструктора запросов недостаточно, запросы можно расширять путем написания кода. После задания условий запросы можно использовать на экране или как часть бизнес-логики.
Создание запроса
Запросы можно создавать в окне Обозреватель решений. Запрос основывается только на одной сущности или таблице в модели приложения (например, на сущности Customer). Он может также основываться на других запросах в модели приложения. Сущность, таблица или запрос, на которых основан запрос, называются исходными данными запроса. Дополнительные сведения см. в разделе Практическое руководство. Добавление, удаление и изменение запроса.
Создание запроса с помощью конструктора запросов
В большинстве случаев запрос можно создать визуально с помощью конструктора запросов. Чтобы добавить в запрос условия фильтра, группы фильтров, условия сортировки и параметры, выберите соответствующие элементы в конструкторе. Дополнительные сведения см. в разделе Практическое руководство. Разработка запроса с помощью конструктора запросов.
Условия фильтра
Чтобы уменьшить число результатов запроса, можно добавить одно или несколько условий фильтра. Условие фильтра описывает правило, которое должно соблюдаться для каждой строки данных. В результаты запроса включаются строки, соответствующие правилу. Условие фильтра содержит следующие три основные части:
свойство выбора;
значение сравнения;
оператор.
Свойство выбора — это свойство, которое требуется использовать в качестве основы для условия фильтра. Например, чтобы вернуть заказы на продажу с определенной датой заказа, в качестве свойства выбора можно использовать свойство OrderDate. Свойством выбора может быть свойство в исходных данных или свойство в связанной сущности или таблице. В конструкторе запросов свойства отображаются только для связанных сущностей или таблиц с кратностью от нуля до единицы. Например, заказу на продажу может соответствовать только один клиент. Поэтому в запросе, возвращающем заказы на продажу, в качестве части условия фильтра можно выбрать свойства связанного клиента. Чтобы использовать свойство для связанной сущности или таблицы с кратностью "многие", необходимо расширить запрос с помощью кода.
Значение сравнения сравнивается со свойством выбора. Значением сравнения может быть литеральное значение, например строка "09.22.2009 12:00:00", свойство выбора, параметр или относительное значение, например Сейчас, Сегодня или Начало недели.
Оператор — это символ, определяющий нужный тип сравнения. Например, для возврата заказов на продажу, для которых дата заказа предшествует дате "09.22.2009 12:00:00", выберите оператор "<".
Полное условие фильтра, описанное в данном примере, следующее: Where OrderDate < 9/22/2009 12:00:00 AM.
Отношения между условиями фильтра можно задавать с помощью следующих логических операторов: And, Or, And Not, Or Not.
Порядок условий можно изменять, перетаскивая их в нужные места в конструкторе.
На следующем рисунке показаны составные части условия фильтра.
Группы фильтров
Условия фильтра можно группировать таким образом, чтобы они вычислялись как единый блок отдельно от остальных условий фильтра. Для этого создайте в конструкторе запросов группу фильтров.
Группирование условий фильтра аналогично заключению выражений в скобки в математическом уравнении или логическом выражении. При группировании условий логический оператор, расположенный перед первым условием в группе, применяется ко всей группе.
Аналогично отдельным условиям фильтра, можно изменять порядок групп фильтров, перетаскивая их в нужное место в конструкторе.
На следующем рисунке показаны две группы фильтров.
Условия сортировки
Чтобы указать порядок по умолчанию, в котором записи будут отображаться в результатах запроса, добавьте одно или несколько условий сортировки. Условие сортировки содержит свойство и направление (например, OrderDate и Ascending). Условия сортировки определяют порядок сортировки по умолчанию для записей, которые появляются на экране. Пользователи могут просматривать записи в другом порядке, выбирая соответствующие параметры в пользовательском интерфейсе экрана. В конструкторе запросов можно изменять порядок условий сортировки, перетаскивая их в нужное место в списке.
Параметры
Можно разрешить пользователям выполнять динамическую фильтрацию результатов запроса. Например, можно разрешить пользователю просматривать заказы на продажу по регионам, выбирая на экране нужную территорию продаж. Для поддержки этого сценария добавьте в запрос параметр и присвойте запросу соответствующее имя (например, SalesTerritory). Затем задайте для параметра значение сравнения фильтра. Например, выражение запроса может иметь следующий вид: Where TerritoryID = SalesTerritory.
Можно создать экраны, на которых пользователи могут вводить значение параметра во время выполнения. Дополнительные сведения см. в разделе Практическое руководство. Ввод значения для параметра запроса.
Расширение запроса с помощью кода
Некоторые типы условий фильтра конструктором запросов не поддерживаются. Если возможностей конструктора недостаточно, условия можно добавить в запрос с помощью кода.
Примечание
Расширение запроса на экране не поддерживается.Расширять можно только запросы, отображаемые в области Обозреватель решений.Дополнительные сведения об изменении запроса на экране см. в разделе Практическое руководство. Фильтрация данных на экране Silverlight.
В следующей таблице показаны два условия фильтра, которые невозможно создать с помощью конструктора запросов.
Условие фильтра |
Причины для использования кода |
---|---|
Возврат первых 10 клиентов по числу заказов на продажу. |
Чтобы определить число заказов на продажу, необходимо использовать операцию Count. Операции Count, Aggregate и Sum в конструкторе запросов недоступны. |
Возврат всех клиентов, которые приобрели тачку. |
Чтобы определить, приобрел ли клиент тачку, необходимо использовать условие фильтра, которое ссылается на сущность Product. Поскольку один клиент может быть связан с несколькими продуктами, сущность Product вполне вероятно может существовать на стороне "многие" отношения Customer-Product. Конструктор запросов не поддерживает переход на сторону "многие" отношения. |
Чтобы устранить это ограничение, можно добавить пользовательский код в метод, который вызывается при выполнении запроса. Дополнительные сведения см. в разделе Практическое руководство. Расширение запроса с помощью кода.
В коде можно определить условия фильтра с помощью стандартного синтаксиса LINQ. При выполнении запроса для получения его результатов условия, указанные в конструкторе, объединяются с условиями, определенными в коде.
Любые условия, определенные в коде, не отображаются в качестве условий фильтра в конструкторе запросов. Аналогично, условия фильтра, добавленные с помощью конструктора запросов, не отображаются в методе. Добавить параметр в запрос можно только с помощью конструктора запросов. Параметры, добавленные с помощью конструктора запросов, отображаются в списке параметров метода.
Использование запроса
Запрос можно использовать на экране или выполнить его в коде в рамках бизнес-операции.
Использование запроса на экране
Можно создать экран, основанный на пользовательском запросе (например, экран, на котором отображается список клиентов на территории США). Дополнительные сведения см. в разделе Практическое руководство. Создание экрана Silverlight.
На экран можно добавить несколько запросов. Например, можно создать запрос, отображающий список заказов на продажу для конкретного клиента. Этот запрос можно добавить на экран клиента. После этого можно разрешить пользователю выбирать клиента для просмотра соответствующих ему заказов на продажу. Дополнительные сведения о выполнении этой операции см. в разделе Практическое руководство. Ввод значения для параметра запроса.
Использование запроса в коде
Запросы можно извлекать из модели приложения и выполнять в коде. Благодаря этому можно работать с целевыми коллекциями данных в бизнес-логике приложения. Дополнительные сведения см. в разделе Практическое руководство. Извлечение данных из запроса с помощью кода.
Связанные разделы
Название |
Описание |
Практическое руководство. Добавление, удаление и изменение запроса |
Описывается порядок добавления запроса в пользовательском интерфейсе Visual Studio LightSwitch. |
Практическое руководство. Разработка запроса с помощью конструктора запросов |
Описывается порядок определения условий фильтра, параметров и условий сортировки запроса с помощью визуального конструктора. |
Практическое руководство. Ввод значения для параметра запроса |
Описывается порядок разрешения пользователям вводить значение для параметра запроса. |
Описывается порядок изменения запроса вне конструктора. |
|
Описывается порядок обработки событий, происходящих до и после выполнения запроса. |
|
Практическое руководство. Извлечение данных из запроса с помощью кода |
Описывается порядок извлечения и выполнения запроса с помощью кода. |
Описываются свойства запросов и их элементов. Значения этих свойств можно задавать в окне Свойства. |