HOW TO:執行傳回基本型別集合的查詢

本主題提供的範例將說明如何執行可傳回基本型別集合的查詢。 若只要傳回單一物件,請在查詢頂端使用下列其中一個方法:FirstFirstOrDefaultSingleSingleOrDefault

相同範例會使用下列每個 Entity Framework 查詢技術顯示:

  • LINQ to Entities

  • Entity SQL 與 ObjectQuery<T>

  • ObjectQuery<T> 的查詢產生器方法

本主題的範例根據 Adventure Works Sales Model。若要執行此主題中的程式碼,您必須已經將 Adventure Works Sales Model 加入到專案中,並設定您的專案使用 Entity Framework。如需詳細資訊,請參閱 HOW TO:使用實體資料模型精靈 (Entity Framework)HOW TO:手動設定 Entity Framework 專案HOW TO:手動設定 Entity Framework 專案

範例

以下是 LINQ to Entities 範例。

Dim contactId As Integer = 377

Using context As New AdventureWorksEntities()
    ' Select a value. 
    Dim orders As ObjectSet(Of SalesOrderHeader) = context.SalesOrderHeaders

    Dim orderQuery As IQueryable(Of Int32) = From order In orders _
        Where order.Contact.ContactID = contactId _
        Select order.PurchaseOrderNumber.Length

    ' Iterate through the collection of values. 
    For Each result As Int32 In orderQuery
        Console.WriteLine("{0}", result)
    Next

    ' Use a nullable DateTime value because ShipDate can be null. 
    Dim shipDateQuery As IQueryable(Of System.Nullable(Of DateTime)) = From order In orders _
        Where order.Contact.ContactID = contactId _
        Select order.ShipDate

    ' Iterate through the collection of values. 
    For Each shipDate As System.Nullable(Of DateTime) In shipDateQuery
        Dim shipDateMessage As String = "date not set"

        If shipDate IsNot Nothing Then
            shipDateMessage = shipDate.ToString()
        End If
        Console.WriteLine("Ship Date: {0}.", shipDateMessage)
    Next
End Using
int contactId = 377;

using (AdventureWorksEntities context
    = new AdventureWorksEntities())
{
    // Select a value.
    ObjectSet<SalesOrderHeader> orders
        = context.SalesOrderHeaders;

    IQueryable<Int32> orderQuery =
        from order in orders
        where order.Contact.ContactID == contactId
        select order.PurchaseOrderNumber.Length;

    // Iterate through the collection of values.
    foreach (Int32 result in orderQuery)
    {
        Console.WriteLine("{0}", result);
    }

    // Use a nullable DateTime value because ShipDate can be null.
    IQueryable<DateTime?> shipDateQuery =
        from order in orders
        where order.Contact.ContactID == contactId
        select order.ShipDate;

    // Iterate through the collection of values.
    foreach (DateTime? shipDate in shipDateQuery)
    {
        string shipDateMessage = "date not set";

        if (shipDate != null)
        {
            shipDateMessage = shipDate.ToString();
        }
        Console.WriteLine("Ship Date: {0}.", shipDateMessage);
    }
}

以下是 Entity SQL 範例。

Dim contactId As Integer = 377

Using context As New AdventureWorksEntities()
    Dim orderQueryString As String = "SELECT VALUE Length(order.PurchaseOrderNumber) FROM " & _
        " AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.CustomerID = @contactId"
    Dim shipDateQueryString As String = "SELECT VALUE order.ShipDate" & _
        " FROM AdventureWorksEntities.SalesOrderHeaders AS order WHERE order.CustomerID = @contactId"

    ' Use the SelectValue method to select a value. 
    Dim orderQuery As New ObjectQuery(Of Int32)(orderQueryString, context, MergeOption.NoTracking)
    orderQuery.Parameters.Add(New ObjectParameter("contactId", contactId))

    ' Iterate through the collection of values. 
    For Each result As Int32 In orderQuery
        Console.WriteLine("{0}", result)
    Next

    ' Use a nullable DateTime value because ShipDate can be null. 
    Dim shipDateQuery As New ObjectQuery(Of Nullable(Of DateTime))(shipDateQueryString, context, MergeOption.NoTracking)
    shipDateQuery.Parameters.Add(New ObjectParameter("contactId", contactId))

    ' Iterate through the collection of values. 
    For Each shipDate As Nullable(Of DateTime) In shipDateQuery
        Dim shipDateMessage As String = "date not set"

        If shipDate IsNot Nothing Then
            shipDateMessage = shipDate.ToString()
        End If
        Console.WriteLine("Ship Date: {0}.", shipDateMessage)
    Next
End Using
int contactId = 377;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    string orderQueryString = @"SELECT VALUE Length(order.PurchaseOrderNumber)
        FROM AdventureWorksEntities.SalesOrderHeaders AS order
        WHERE order.CustomerID = @contactId";
    string shipDateQueryString = @"SELECT VALUE order.ShipDate
        FROM AdventureWorksEntities.SalesOrderHeaders AS order
        WHERE order.CustomerID = @contactId";

    // Use the SelectValue method to select a value.
    ObjectQuery<Int32> orderQuery =
        new ObjectQuery<Int32>(orderQueryString,
            context, MergeOption.NoTracking);
    orderQuery.Parameters.Add(
        new ObjectParameter("contactId", contactId));

    // Iterate through the collection of values.
    foreach (Int32 result in orderQuery)
    {
        Console.WriteLine("{0}", result);
    }

    // Use a nullable DateTime value because ShipDate can be null.
    ObjectQuery<Nullable<DateTime>> shipDateQuery =
        new ObjectQuery<Nullable<DateTime>>(shipDateQueryString,
    context, MergeOption.NoTracking);
    shipDateQuery.Parameters.Add(
        new ObjectParameter("contactId", contactId));

    // Iterate through the collection of values.
    foreach (Nullable<DateTime> shipDate in shipDateQuery)
    {
        string shipDateMessage = "date not set";

        if (shipDate != null)
        {
            shipDateMessage = shipDate.ToString();
        }
        Console.WriteLine("Ship Date: {0}.", shipDateMessage);
    }
}

以下是查詢產生器方法範例。

Dim contactId As Integer = 377

Using context As New AdventureWorksEntities()
    ' Use the SelectValue method to select a value. 
    Dim orderQuery As ObjectQuery(Of Int32) = context.SalesOrderHeaders.Where("it.CustomerID = @contactId", _
                        New ObjectParameter("contactId", contactId)).SelectValue(Of Int32)("Length(it.PurchaseOrderNumber)")

    ' Iterate through the collection of values. 
    For Each result As Int32 In orderQuery
        Console.WriteLine("{0}", result)
    Next

    ' Use a nullable DateTime value because ShipDate can be null. 
    Dim shipDateQuery As ObjectQuery(Of Nullable(Of DateTime)) = _
        context.SalesOrderHeaders.Where("it.CustomerID = @contactId", _
            New ObjectParameter("contactId", contactId)).SelectValue(Of Nullable(Of DateTime))("it.ShipDate")

    ' Iterate through the collection of values. 
    For Each shipDate As Nullable(Of DateTime) In shipDateQuery
        Dim shipDateMessage As String = "date not set"

        If shipDate IsNot Nothing Then
            shipDateMessage = shipDate.ToString()
        End If
        Console.WriteLine("Ship Date: {0}.", shipDateMessage)
    Next
End Using
int contactId = 377;

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    // Use the SelectValue method to select a value.
    ObjectQuery<Int32> orderQuery =
        context.SalesOrderHeaders
        .Where("it.CustomerID = @contactId",
        new ObjectParameter("contactId", contactId))
        .SelectValue<Int32>("Length(it.PurchaseOrderNumber)");

    // Iterate through the collection of values.
    foreach (Int32 result in orderQuery)
    {
        Console.WriteLine("{0}", result);
    }

    // Use a nullable DateTime value because ShipDate can be null.
    ObjectQuery<Nullable<DateTime>> shipDateQuery =
        context.SalesOrderHeaders
        .Where("it.CustomerID = @contactId",
            new ObjectParameter("contactId", contactId))
        .SelectValue<Nullable<DateTime>>("it.ShipDate");

    // Iterate through the collection of values.
    foreach (Nullable<DateTime> shipDate in shipDateQuery)
    {
        string shipDateMessage = "date not set";

        if (shipDate != null)
        {
            shipDateMessage = shipDate.ToString();
        }
        Console.WriteLine("Ship Date: {0}.", shipDateMessage);
    }
}

另請參閱

工作

HOW TO:執行傳回實體類型物件的查詢 (Entity Framework)
HOW TO:執行傳回匿名型別集合的查詢 (Entity Framework)
HOW TO:執行參數化查詢 (Entity Framework)

概念

查詢產生器方法 (Entity Framework)