Практическое руководство. Извлечение данных из запроса с помощью кода
Можно извлекать запросы из модели и затем выполнять их в коде. Благодаря этому можно работать с целевыми коллекциями данных в бизнес-логике приложения.
Например, модель может содержать запрос с именем Products in Stock. Чтобы определить доступность продукта, можно написать код проверки, который извлекает запрос Products in Stock, а затем выполняет его. После выполнения запроса код может выполнять итерацию по коллекции результатов. Если продукт в этой коллекции соответствует продукту в текущем заказе на продажу, пользователь может уведомить клиента о задержке.
Можно также добавить код для уточнения результатов запроса, используя предложение where. Использование предложения WHERE для уточнения результатов запроса позволяет повысить производительность, поскольку условия предложения WHERE применяются на уровне сервера. Дополнительные сведения см. в разделе Запросы: извлечение сведений из источника данных..
Пример: извлечение данных из запроса и итерация по результатам
Следующий вспомогательный метод вызывается, когда пользователь добавляет новую строку в заказ на продажу. Если имеется сущность с именем Order_Details, этот метод можно вызвать из метода Order_Details_Inserting.
Этот код извлекает 10 лучших клиентов на основе заказов на продажу за счет выполнения запроса с именем TopNSalesOrders. Если идентификатор клиента, разместившего этот заказ, совпадает с идентификатором какого-либо из клиентов, возвращенных запросом, к позиции строки применяется скидка 10 %.
Private Sub Good_Customer_Discount(ByVal entity As Order_Detail)
For Each cust As Customer In _
Me.DataWorkspace.NorthwindData.TopNSalesOrders(10)
If cust.CustomerID = entity.Order.Customer.CustomerID Then
entity.Discount = 0.1
End If
Next
End Sub
private void Good_Customer_Discount(Order_Detail entity)
{
foreach (Customer cust in this.DataWorkspace.NorthwindData.
TopNSalesOrders(10))
{
if (cust.CustomerID == entity.Order.Customer.CustomerID)
{
entity.Discount = 0.1F;
}
}
}
Пример: уточнение результатов запроса с помощью предложения WHERE
Ниже приведен пример кода, который может служить альтернативой коду в предыдущем примере. Этот код применяет предложение WHERE к запросу TopNSalesOrders и возвращает данные клиента только в том случае, если этот клиент размещает текущий заказ.
Private Sub Good_Customer_Discount2(ByVal entity As Order_Detail)
Dim query As IDataServiceQueryable(Of Customer)
query = From mycustomer In Me.DataWorkspace.NorthwindData.TopNSalesOrders(10)
Where mycustomer.CustomerID = entity.Order.Customer.CustomerID
Select mycustomer
If Not IsNothing(query.SingleOrDefault) Then
entity.Discount = 0.01
End If
End Sub
private void Good_Customer_Discount2(Order_Detail entity)
{
IDataServiceQueryable<Customer> query;
query = from myCustomer in this.DataWorkspace.NorthwindData.
TopNSalesOrders(10)
where myCustomer.CustomerID == entity.Order.Customer.CustomerID
select myCustomer;
if (query.SingleOrDefault() != null)
{
entity.Discount = 0.1F;
}
}
}
Следующие действия
Сведения о визуальном создании запроса в конструкторе см. в разделе Практическое руководство. Разработка запроса с помощью конструктора запросов.
Сведения о расширении запроса в модели с помощью кода см. в разделе Практическое руководство. Расширение запроса с помощью кода.
См. также
Задачи
Практическое руководство. Добавление, удаление и изменение запроса
Пошаговое руководство. Проектирование экрана Silverlight в LightSwitch
Практическое руководство. Разработка запроса с помощью конструктора запросов
Практическое руководство. Расширение запроса с помощью кода