Procédure : projeter des résultats de requête (WCF Data Services)
La projection fournit un mécanisme permettant de réduire la quantité de données retournées par une requête en spécifiant que seules certaines propriétés d'une entité doivent être retournées dans la réponse. Vous pouvez effectuer des projections sur les résultats d'une requête Services de données WCF en utilisant l'option de requête $select ou en utilisant la clause select (Select dans Visual Basic) dans une requête LINQ. Pour plus d'informations, voir Interrogation du service de données (WCF Data Services).
L'exemple dans cette rubrique utilise l'exemple de service de données Northwind et des classes de service de données client générées automatiquement. Ce service et les classes de données clientes sont créés lorsque vous complétez le démarrage rapide WCF Data Services.
Exemple
L'exemple suivant affiche une requête LINQ qui projette des entités Customers dans un nouveau type CustomerAddress, qui contient uniquement des propriétés spécifiques à l'adresse ainsi que la propriété d'identité. Cette classe CustomerAddress est définie sur le client et est attribuée de sorte que la bibliothèque cliente puisse le reconnaître comme un type d'entité.
' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)
' Define an anonymous LINQ query that projects the Customers type into
' a CustomerAddress type that contains only address properties.
Dim query = From c In context.Customers _
Where c.Country = "Germany" _
Select New CustomerAddress With { _
.CustomerID = c.CustomerID, _
.Address = c.Address, _
.City = c.City, _
.Region = c.Region, _
.PostalCode = c.PostalCode, _
.Country = c.Country}
Try
' Enumerate over the query result, which is executed implicitly.
For Each item In query
' Modify the address and mark the object as updated.
item.Address += " #101"
context.UpdateObject(item)
' Write out the current values.
Console.WriteLine("Customer ID: {0} \r\nStreet: {1} " _
& "\r\nCity: {2} \r\nState: {3} \r\nZip Code: {4} \r\nCountry: {5}", _
item.CustomerID, item.Address, item.City, item.Region, _
item.PostalCode, item.Country)
Next
' Save changes to the data service.
context.SaveChanges()
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 an anonymous LINQ query that projects the Customers type into
// a CustomerAddress type that contains only address properties.
var query = from c in context.Customers
where c.Country == "Germany"
select new CustomerAddress {
CustomerID = c.CustomerID,
Address = c.Address,
City = c.City,
Region = c.Region,
PostalCode = c.PostalCode,
Country = c.Country};
try
{
// Enumerate over the query result, which is executed implicitly.
foreach (var item in query)
{
// Modify the address and mark the object as updated.
item.Address += " #101";
context.UpdateObject(item);
// Write out the current values.
Console.WriteLine("Customer ID: {0} \r\nStreet: {1} "
+ "\r\nCity: {2} \r\nState: {3} \r\nZip Code: {4} \r\nCountry: {5}",
item.CustomerID, item.Address, item.City, item.Region,
item.PostalCode, item.Country);
}
// Save changes to the data service.
context.SaveChanges();
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred during query execution.", ex);
}
L'exemple suivant affiche une requête LINQ qui projette les entités Customers retournées dans un nouveau type CustomerAddressNonEntity, qui contient uniquement des propriétés spécifiques à l'adresse et aucune propriété d'identité. Cette classe CustomerAddressNonEntity est définie sur le client et n'est pas attribuée comme un type d'entité.
' Create the DataServiceContext using the service URI.
Dim context = New NorthwindEntities(svcUri)
' Define an anonymous LINQ query that projects the Customers type into
' a CustomerAddress type that contains only address properties.
Dim query = From c In context.Customers _
Where c.Country = "Germany" _
Select New CustomerAddressNonEntity With _
{.CompanyName = c.CompanyName, _
.Address = c.Address, _
.City = c.City, _
.Region = c.Region, _
.PostalCode = c.PostalCode, _
.Country = c.Country}
Try
' Enumerate over the query result, which is executed implicitly.
For Each item In query
item.Address += "Street"
Console.WriteLine("Company name: {0} \nStreet: {1} " _
& "\nCity: {2} \nState: {3} \nZip Code: {4} \nCountry: {5}", _
item.CompanyName, item.Address, item.City, item.Region, _
item.PostalCode, item.Country)
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 an anonymous LINQ query that projects the Customers type into
// a CustomerAddress type that contains only address properties.
var query = from c in context.Customers
where c.Country == "Germany"
select new CustomerAddressNonEntity
{
CompanyName = c.CompanyName,
Address = c.Address,
City = c.City,
Region = c.Region,
PostalCode = c.PostalCode,
Country = c.Country
};
try
{
// Enumerate over the query result, which is executed implicitly.
foreach (var item in query)
{
item.Address += "Street";
Console.WriteLine("Company name: {0} \nStreet: {1} "
+ "\nCity: {2} \nState: {3} \nZip Code: {4} \nCountry: {5}",
item.CompanyName, item.Address, item.City, item.Region,
item.PostalCode, item.Country);
}
}
catch (DataServiceQueryException ex)
{
throw new ApplicationException(
"An error occurred during query execution.", ex);
}
L'exemple suivant affiche les définitions des types CustomerAddressCustomerAddressNonEntity utilisés dans les exemples précédents.
<DataServiceKey("CustomerID")> _
Partial Public Class CustomerAddress
Private _customerID As String
Private _address As String
Private _city As String
Private _region As String
Private _postalCode As String
Private _country As String
Public Property CustomerID() As String
Get
Return Me._customerID
End Get
Set(ByVal value As String)
Me._customerID = Value
End Set
End Property
Public Property Address() As String
Get
Return Me._address
End Get
Set(ByVal value As String)
Me._address = Value
End Set
End Property
Public Property City() As String
Get
Return Me._city
End Get
Set(ByVal value As String)
Me._city = Value
End Set
End Property
Public Property Region() As String
Get
Return Me._region
End Get
Set(ByVal value As String)
Me._region = Value
End Set
End Property
Public Property PostalCode() As String
Get
Return Me._postalCode
End Get
Set(ByVal value As String)
Me._postalCode = Value
End Set
End Property
Public Property Country() As String
Get
Return Me._country
End Get
Set(ByVal value As String)
Me._country = value
End Set
End Property
End Class
Public Class CustomerAddressNonEntity
Private _companyName As String
Private _address As String
Private _city As String
Private _region As String
Private _postalCode As String
Private _country As String
Public Property CompanyName() As String
Get
Return Me._companyName
End Get
Set(ByVal value As String)
Me._companyName = value
End Set
End Property
Public Property Address() As String
Get
Return Me._address
End Get
Set(ByVal value As String)
Me._address = Value
End Set
End Property
Public Property City() As String
Get
Return Me._city
End Get
Set(ByVal value As String)
Me._city = Value
End Set
End Property
Public Property Region() As String
Get
Return Me._region
End Get
Set(ByVal value As String)
Me._region = Value
End Set
End Property
Public Property PostalCode() As String
Get
Return Me._postalCode
End Get
Set(ByVal value As String)
Me._postalCode = Value
End Set
End Property
Public Property Country() As String
Get
Return Me._country
End Get
Set(ByVal value As String)
Me._country = value
End Set
End Property
End Class
[DataServiceKey("CustomerID")]
public partial class CustomerAddress
{
private string _customerID;
private string _address;
private string _city;
private string _region;
private string _postalCode;
private string _country;
public string CustomerID
{
get
{
return this._customerID;
}
set
{
this._customerID = value;
}
}
public string Address
{
get
{
return this._address;
}
set
{
this._address = value;
}
}
public string City
{
get
{
return this._city;
}
set
{
this._city = value;
}
}
public string Region
{
get
{
return this._region;
}
set
{
this._region = value;
}
}
public string PostalCode
{
get
{
return this._postalCode;
}
set
{
this._postalCode = value;
}
}
public string Country
{
get
{
return this._country;
}
set
{
this._country = value;
}
}
}
public class CustomerAddressNonEntity
{
private string _companyName;
private string _address;
private string _city;
private string _region;
private string _postalCode;
private string _country;
public string CompanyName
{
get
{
return this._companyName;
}
set
{
this._companyName = value;
}
}
public string Address
{
get
{
return this._address;
}
set
{
this._address = value;
}
}
public string City
{
get
{
return this._city;
}
set
{
this._city = value;
}
}
public string Region
{
get
{
return this._region;
}
set
{
this._region = value;
}
}
public string PostalCode
{
get
{
return this._postalCode;
}
set
{
this._postalCode = value;
}
}
public string Country
{
get
{
return this._country;
}
set
{
this._country = value;
}
}
}