Cómo ejecutar una consulta que devuelve un tipo primitivo (Entity Framework)
En este tema se proporcionan ejemplos de cómo ejecutar consultas que devuelven un tipo primitivo. Se muestra el mismo ejemplo utilizando 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>
Los ejemplos de este tema se basan en el modelo Adventure Works Sales. Para ejecutar el código de este ejemplo, se debe haber agregado ya el modelo AdventureWorks Sales al proyecto y haber configurado el proyecto para usar Entity Framework. Para ello, complete los procedimientos de Cómo configurar manualmente un proyecto de Entity Framework y Cómo definir manualmente un modelo Entity Data Model (Entity Framework). También puede utilizar el Asistente para Entity Data Model con el fin de definir el modelo AdventureWorks Sales. Para obtener más información, vea Cómo usar el Asistente para Entity Data Model (Entity Framework).
Ejemplo
A continuación se muestra el ejemplo de LINQ to Entities.
Dim contactId As Integer = 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 As String = "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());
}
}
A continuación se muestra el ejemplo de Entity SQL.
Dim contactId As Integer = 377
Using advWorksContext As New AdventureWorksEntities
Dim orderQueryString As String = "SELECT VALUE Length(order.PurchaseOrderNumber) " & _
"FROM AdventureWorksEntities.SalesOrderHeader AS order " & _
"WHERE order.CustomerID = @contactId"
Dim shipDateQueryString As String = "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 As String = "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());
}
}
A continuación se muestra el ejemplo del método del generador de consultas.
Dim contactId As Integer = 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 As String = "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());
}
}
Vea también
Tareas
Cómo ejecutar una consulta que devuelve un tipo de entidad (Entity Framework)
Cómo ejecutar una consulta que devuelve un tipo anónimo (Entity Framework)
Cómo ejecutar una consulta parametrizada (Entity Framework)
Conceptos
Métodos del generador de consultas (Entity Framework)