Compartir a través de


Cómo: Ejecutar una consulta que devuelve una colección de tipos primitivos (Entity Framework)

En este tema se proporcionan ejemplos de cómo ejecutar consultas que devuelven una colección de tipos primitivos. Para devolver un único objeto, use uno de los siguientes métodos en la consulta: First, FirstOrDefault, Single, SingleOrDefault.

Se muestra el mismo ejemplo usando cada una de las siguientes tecnologías de consulta de Entity Framework :

  • LINQ to Entities

  • Entity SQL con ObjectQuery<T>

  • Métodos del generador de consultas de ObjectQuery<T>

El ejemplo de este tema se basa en el modelo AdventureWorks Sales. Para ejecutar el código de este tema, debe haber agregado el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para que use Entity Framework. Para obtener más información, vea Cómo: Usar el Asistente para Entity Data Model (Entity Framework) o Cómo: Configurar manualmente un proyecto de Entity Framework y Cómo: Definir manualmente un modelo Entity Data Model (Entity Framework).

Ejemplo

A continuación se muestra el ejemplo de 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);
    }
}

A continuación se muestra el ejemplo de 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);
    }
}

A continuación se muestra el ejemplo del método del generador de consultas.

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

Vea también

Tareas

Cómo: Ejecutar una consulta que devuelva objetos de tipo de entidad (Entity Framework)
Cómo: Ejecutar una consulta que devuelve una colección de tipos anónimos (Entity Framework)
Cómo:Ejecutar una consulta parametrizada (Entity Framework)

Conceptos

Métodos del Generador de consultas (Entity Framework)