Procédure : exécuter une requête qui retourne un type primitif (Entity Framework)
Cette rubrique fournit des exemples d'exécution de requêtes qui retournent un type primitif. Le même exemple est repris en utilisant chacune des technologies de requête Entity Framework suivantes :
LINQ to Entities
Entity SQL avec ObjectQuery<T>
Méthodes du Générateur de requêtes d'ObjectQuery<T>
Les exemples de cette rubrique sont basés sur le modèle de vente Adventure Works Sales Model. Pour exécuter le code de cet exemple, vous devez déjà avoir ajouté le modèle de vente AdventureWorks Sales Model à votre projet et configuré ce dernier pour qu'il utilise Entity Framework. Pour ce faire, exécutez les procédures décrites dans Procédure : configurer manuellement un projet Entity Framework et Procédure : définir manuellement un modèle EDM (Entity Data Model) (Entity Framework). Vous pouvez également définir le modèle de vente AdventureWorks Sales Model à l'aide de l'Assistant EDM. Pour plus d'informations, voir Procédure : utiliser l'Assistant Entity Data Model (Entity Framework).
Exemple
L'exemple ci-dessous utilise 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());
}
}
L'exemple ci-dessous utilise Entité 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());
}
}
L'exemple ci-dessous utilise la méthode du Générateur de requêtes.
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());
}
}
Voir aussi
Tâches
Procédure : exécuter une requête qui retourne un type d'entité (Entity Framework)
Procédure : exécuter une requête qui retourne un type anonyme (Entity Framework)
Procédure : exécuter une requête paramétrable (Entity Framework)
Concepts
Méthodes du Générateur de requêtes (Entity Framework)