Поделиться через


How to: Execute a Query that Returns a Primitive Type (Entity Framework)

This topic provides examples of how to execute queries that return a primitive type. The same example is shown using each of the following Entity Framework query technologies:

  • LINQ to Entities

  • Entity SQL with ObjectQuery<T>

  • Query builder methods of ObjectQuery<T>

The examples in this topic are based on the Adventure Works Sales Model. To run the code in this example, you must have already added the AdventureWorks Sales Model to your project and configured your project to use the Entity Framework. To do this, complete the procedures in How to: Manually Configure an Entity Framework Project and How to: Manually Define an Entity Data Model (Entity Framework). You can also use the Entity Data Model Wizard to define the AdventureWorks Sales Model. For more information, see How to: Use the Entity Data Model Wizard (Entity Framework).

Example

The following is the LINQ to Entities example.

Dim contactId = 377

Using advWorksContext As New AdventureWorksEntities
    Try
        'Select a value.
        Dim orders As ObjectQuery(Of SalesOrderHeader) _
            = advWorksContext.SalesOrderHeader

        Dim orderQuery = _
        From order In orders _
        Where order.Contact.ContactID = contactId _
        Select order.PurchaseOrderNumber.Length

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

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

        ' Iterate through the collection of values.
        For Each shipDate In shipDateQuery
            Dim shipDateMessage = "date not set"

            If Not shipDate = Nothing Then
                shipDateMessage = shipDate.ToString()
            End If
            Console.WriteLine("Ship Date: {0}.", shipDateMessage)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using
int contactId = 377;

using (AdventureWorksEntities advWorksContext 
    = new AdventureWorksEntities())
{
    try
    {
        // Select a value.
        ObjectQuery<SalesOrderHeader> orders 
            = advWorksContext.SalesOrderHeader;
        
        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);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

The following is the Entity SQL example.

Dim contactId = 377

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

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

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

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

        ' Iterate through the collection of values.
        For Each shipDate In shipDateQuery
            Dim shipDateMessage = "date not set"

            If Not shipDate = Nothing Then
                shipDateMessage = shipDate.ToString()
            End If
            Console.WriteLine("Ship Date: {0}.", shipDateMessage)
        Next
    Catch ex As EntityException
        Console.WriteLine(ex.ToString())
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using
int contactId = 377;

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

    try
    {
        // Use the SelectValue method to select a value.
        ObjectQuery<Int32> orderQuery =
            new ObjectQuery<Int32>(orderQueryString, 
                advWorksContext, 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,
        advWorksContext, 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);
        }
    }
    catch (EntityException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

The following is the query builder method example.

Dim contactId = 377

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

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

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

        ' Iterate through the collection of values.
        For Each shipDate In shipDateQuery
            Dim shipDateMessage = "date not set"
            If Not shipDate = Nothing Then
                shipDateMessage = shipDate.ToString()
            End If
            Console.WriteLine("Ship Date: {0}.", shipDateMessage)
        Next
    Catch ex As EntitySqlException
        Console.WriteLine(ex.ToString())
    Catch ex As InvalidOperationException
        Console.WriteLine(ex.ToString())
    End Try
End Using
int contactId = 377;

using (AdventureWorksEntities advWorksContext =
    new AdventureWorksEntities())
{
    try
    {
        // Use the SelectValue method to select a value.
        ObjectQuery<Int32> orderQuery =
            advWorksContext.SalesOrderHeader 
            .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 =
            advWorksContext.SalesOrderHeader
            .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);
        }
    }
    catch (EntitySqlException ex)
    {
        Console.WriteLine(ex.ToString());
    }
    catch (InvalidOperationException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}

See Also

Tasks

How to: Execute a Query that Returns an Entity Type (Entity Framework)
How to: Execute a Query that Returns an Anonymous Type (Entity Framework)
How to: Execute a Parameterized Query (Entity Framework)

Concepts

Query Builder Methods (Entity Framework)

Other Resources

Querying an Entity Data Model (Entity Framework Tasks)