方法: データ サービス クエリを実行する (WCF Data Services)
WCF Data Services では、生成されたクライアント データ サービス クラスを使用して .NET Framework ベースのクライアント アプリケーションからデータ サービスをクエリできます。 次の方法のいずれかを使用してクエリを実行できます。
Add Data Service Reference ツールによって生成される DataServiceContext から取得した名前付きの DataServiceQuery に対して LINQ クエリを実行する。
暗黙的に、Add Data Service Reference ツールによって生成される DataServiceContext から取得した名前付きの DataServiceQuery を列挙する。
明示的に、DataServiceQuery で Execute メソッド (非同期実行の場合は BeginExecute メソッド) を呼び出す。
詳細については、「データ サービスのクエリ (WCF Data Services)」を参照してください。
このトピックの例では、Northwind サンプル データ サービスおよび自動生成されたクライアント データ サービス クラスを使用します。 このサービスおよびクライアント データ クラスは、WCF Data Services クイック スタートを完了したときに作成されます。
例
次の例は、すべての Customers
を返す LINQ クエリを定義して Northwind データ サービスに対して実行する方法を示します。
' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)
Try
' Define a LINQ query that returns all customers.
Dim allCustomers = From cust In context.Customers _
Select cust
' Enumerate over the query obtained from the context.
For Each customer As Customer In allCustomers
Console.WriteLine("Customer Name: {0}", customer.CompanyName)
Next
Catch ex As DataServiceQueryException
Throw New ApplicationException( _
"An error occurred during query execution.", ex)
End Try
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);
try
{
// Define a LINQ query that returns all customers.
var allCustomers = from cust in context.Customers
select cust;
// Enumerate over the query obtained from the context.
foreach (Customer customer in allCustomers)
{
Console.WriteLine("Customer Name: {0}", customer.CompanyName);
}
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred during query execution.", ex);
}
次の例は、Add Data Service Reference ツールによって生成されるコンテキストを使用して、すべての Customers
を返すクエリを Northwind データ サービスに対して暗黙的に実行する方法を示します。 要求された Customers
エンティティ セットの URI は、コンテキストによって自動的に決定されます。 クエリは、列挙が行われるときに暗黙的に実行されます。
' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)
' Define a new query for Customers.
Dim query As DataServiceQuery(Of Customer) = context.Customers
Try
' Enumerate over the query result, which is executed implicitly.
For Each customer As Customer In query
Console.WriteLine("Customer Name: {0}", customer.CompanyName)
Next
Catch ex As DataServiceQueryException
Throw New ApplicationException( _
"An error occurred during query execution.", ex)
End Try
// Create the DataServiceContext using the service URI.
NorthwindEntities context = new NorthwindEntities(svcUri);
// Define a new query for Customers.
DataServiceQuery<Customer> query = context.Customers;
try
{
// Enumerate over the query result, which is executed implicitly.
foreach (Customer customer in query)
{
Console.WriteLine("Customer Name: {0}", customer.CompanyName);
}
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred during query execution.", ex);
}
次の例は、DataServiceContext を使用して、すべての Customers
を返すクエリを Northwind データ サービスに対して明示的に実行する方法を示します。
' Define a request URI that returns Customers.
Dim customersUri = New Uri(svcUri, "Northwind.svc/Customers")
' Create the DataServiceContext using the service URI.
Dim context = New DataServiceContext(svcUri)
Try
' Enumerate over the query result.
For Each customer As Customer In context.Execute(Of Customer)(customersUri)
Console.WriteLine("Customer Name: {0}", customer.CompanyName)
Next
Catch ex As DataServiceQueryException
Throw New ApplicationException( _
"An error occurred during query execution.", ex)
End Try
// Define a request URI that returns Customers.
Uri customersUri = new Uri(svcUri, "Northwind.svc/Customers");
// Create the DataServiceContext using the service URI.
DataServiceContext context = new DataServiceContext(svcUri);
try
{
// Enumerate over the query result.
foreach (Customer customer in context.Execute<Customer>(customersUri))
{
Console.WriteLine("Customer Name: {0}", customer.CompanyName);
}
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred during query execution.", ex);
}