Walkthrough: Retrieving and Displaying Data From a Domain Service

[ This document was written for WCF Services Version 1 Service Pack 2 and might not be up to date Please see Release Notes or Changelog for a list of changes since WCF RIA Services ]
This topic explains how to call the method on the domain context from a Silverlight application that corresponds to the domain service query method you want to access and then how to apply additional filtering on the results of that query to limit which entities are returned or displayed.
To retrieve data in your Silverlight application, you call the method on the domain context that corresponds to the domain service query method that you want to use. For example, a query method in the domain service named GetProducts will have a corresponding method in the domain context named GetProductsQuery. In your Silverlight application, you call GetProductsQuery and that method returns an EntityQuery\ object.
In your Silverlight application, you can apply additional filtering on the query to limit which entities are returned. A query method may return every record from the products table, but you may only want to display the products that have a price value of less than 100. You can use LINQ and a subset of LINQ query operators to modify the results returned from the query. The following lists the available query operators:
  • Where
  • OrderBy
  • ThenBy
  • Skip
  • Take
After you apply additional filtering, you pass the EntityQuery\ object to a parameter in the Load method to execute the query and get the results.
If the query has a QueryAttribute with the IsComposable property set to false, you cannot apply additional filtering on the query. Generally, only queries that return a single entity will have IsComposable set to false.
You can bind the data to any Silverlight control that presents data. The DataGrid control can present the data in a table format.
This walkthrough describes how to retrieve and display data from a domain service. It also shows how to use the available query operator to apply additional filtering on a query.


This and the other walkthroughs presented in the Open Ria Services documentation require several prerequisite programs, such as Visual Studio and the Silverlight Developer Runtime and SDK, be installed and configured properly, in addition to Open Ria Services and the Open Ria Services Toolkit. They also require installing and configuring SQL Server 2008 R2 Express with Advanced Services and installing the AdventureWorks OLTP and LT database.
Detailed instructions for the satisfaction of each of these prerequisites are provided by the topics within the Prerequisites for Open Ria Services node. Follow the instructions provided there before proceeding with this walkthrough to ensure that you encounter as few problems as possible when working through this Open Ria Services walkthroughs.
This walkthrough assumes that you have completed the Walkthrough: Creating a Open Ria Services Solution and continues from the application created with the procedures described there.

To retrieve and display data from a domain service

  1. 1.
    Open the RIAServicesExample solution obtained from completing instructions outlined in the Walkthrough: Creating a Open Ria Services Solution topic.
  2. 2.
    In your Silverlight application, open the code-behind page for MainPage.xaml.
  3. 3.
    Create an EntityQuery\ instance by calling the GetCustomersQuery method.
  4. 4.
    Use the available query operations to filter the customers.
  5. 5.
    Pass the query object to the Load method and assign the return value to the LoadOperation\.
    The following code shows how to retrieve customers from the domain service. It filters customers who have phone numbers that start with 583 and orders them alphabetically by LastName. The results are displayed in a DataGrid.
    Partial Public Class MainPage
    Inherits UserControl
    Private _customerContext As New CustomerDomainContext
    Public Sub New()
    Dim query As EntityQuery(Of Customer)
    query = _
    From c In Me._customerContext.GetCustomersQuery() _
    Where c.Phone.StartsWith("583") _
    Order By c.LastName
    Dim loadOp = Me._customerContext.Load(query)
    CustomerGrid.ItemsSource = loadOp.Entities
    End Sub
    End Class
    public partial class MainPage : UserControl
    private CustomerDomainContext _customerContext = new CustomerDomainContext();
    public MainPage()
    EntityQuery<Customer> query =
    from c in _customerContext.GetCustomersQuery()
    where c.Phone.StartsWith("583")
    orderby c.LastName
    select c;
    LoadOperation<Customer> loadOp = this._customerContext.Load(query);
    CustomerGrid.ItemsSource = loadOp.Entities;

See Also