共用方式為


HOW TO:專案查詢結果 (WCF Data Services)

投影提供一種機制,可藉由指定回應中僅傳回特定實體屬性的方式降低查詢傳回的資料量。 您可以在 WCF Data Services 查詢的結果上執行投影,方式為在 LINQ 查詢中使用 $select 查詢選項或使用 select 子句 (在 Visual Basic 中為 Select)。 如需詳細資訊,請參閱查詢資料服務 (WCF Data Services)

本主題的範例使用 Northwind 範例資料服務,以及自動產生的用戶端資料服務類別。 此服務和用戶端資料類別會在您完成 WCF Data Services 快速入門時建立。

範例

下列範例顯示會將 Customers 實體投射至新的 CustomerAddress 類型之 LINQ 查詢,其中僅包含位址專用屬性加上識別屬性。 這個 CustomerAddress 類別已在用戶端上定義並屬性化,如此用戶端程式庫便能將它辨認為實體類型。

' 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);
}

下列範例顯示會將傳回之 Customers 實體投射至新的 CustomerAddressNonEntity 類型之 LINQ 查詢,其中僅包含位址專用屬性但不包含識別屬性。 這個 CustomerAddressNonEntity 類別已在用戶端上定義,但並未屬性化為實體類型。

' 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);
}

在下列範例會顯示之前範例所使用的 CustomerAddressCustomerAddressNonEntity 類型的定義。

<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;
        }
    }
}