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)