Utiliser LINQ pour créer une requête
Le fournisseur de requêtes Language-Integrated Query (LINQ) .NET dans Microsoft Dataverse utilise une syntaxe LINQ standard. La première étape dans le cadre de la création d’une requête LINQ consiste à identifier les types de tables pertinentes et les relations entre elles. Vous pouvez ensuite spécifier la source de données et les autres paramètres de requête.
La clause from
est utilisée pour renvoyer une seule table « racine ». Le fournisseur de requêtes ne peut renvoyer que des lignes d’un seul type de table. Les clauses orderby
et select
doivent faire référence à cette table racine. Vous pouvez utiliser les clauses join
pour ajouter des lignes avec une relation à la table « racine ».
Opérateurs LINQ
Toutes les expressions de requête LINQ ont un format similaire. Les sections suivantes indiquent les clauses les plus courantes dans une expression de requête LINQ lors de l’utilisation du fournisseur de requêtes LINQ des applications Dataverse.
from
En cas d’utilisation du contexte de service généré et de la liaison anticipée, utilisez le groupe de tables IQueryable
, tel que AccountSet
, dans le contexte généré.
En l’absence d’utilisation du contexte généré, la méthode CreateQuery
sur l’objet de contexte de service vous permet d’accéder aux lignes de tables Dataverse.
Exemple :
Utilisation du contexte de service généré :
var query1 = from c in context.ContactSet
select c;
Utilisation de la méthode CreateQuery
:
var query1 = from c in context.CreateQuery<Contact>()
select c;
join
La clause join
représente une jointure interne. Vous utilisez la clause pour travailler avec deux, voire plusieurs tables qui peuvent être jointes avec une valeur de colonne courante.
Exemple :
from c in context.ContactSet
join a in context.AccountSet on c.ContactId equals a.PrimaryContactId.Id
où
La clause where
applique un filtre aux résultats, souvent à l’aide d’une expression booléenne. Le filtre spécifie les éléments à exclure de la séquence source. Chaque clause where
ne peut contenir que des conditions par rapport à un seul type de table. Une condition composite impliquant plusieurs tables n’est pas valide. En revanche, chaque table doit être filtrée dans des clauses distinctes where
.
Exemple :
from a in context.AccountSet
where (a.Name.StartsWith("Contoso") && a.Address1_StateOrProvince == "WA")
orderby
L’opérateur orderby
place les colonnes de la requête renvoyée dans un ordre spécifique.
Exemple :
var query1 = from c in context.CreateQuery<Contact>()
orderby c.FullName ascending
select c;
foreach ( var q in query1)
{
Console.WriteLine(q.FirstName + " " + q.LastName);
}
sélectionner
La clause select
définit la forme des données renvoyées. La clause crée un groupe de colonnes basé sur les résultats de l’expression de requête. Vous pouvez également définir une instance d’un nouvel objet avec lequel travailler. L’objet créé à l’aide de la clause select
n’est pas créé sur le serveur, mais est une instance locale.
Exemple :
select new Contact
{
ContactId = c.ContactId,
FirstName = c.FirstName,
LastName = c.LastName,
Address1_Telephone1 = c.Address1_Telephone1
};
Limitations LINQ
Le fournisseur de requêtes LINQ prend en charge un sous-ensemble des opérateurs LINQ. Les conditions pouvant être exprimées dans LINQ ne sont pas toutes prises en charge. Le tableau suivant indique certaines des limites des opérateurs LINQ de base.
Opérateur LINQ | Limitations |
---|---|
join |
Représente une jointure interne ou externe. Seuls les jointures externes de gauche sont prises en charge. |
from |
Prend en charge une clause from par requête. |
where |
À gauche de la clause doit figurer un nom de colonne et à sa droite doit figurer une valeur. Vous ne pouvez pas définir une constante à gauche. Les deux parties de la clause ne peuvent pas être des constantes. Prend en charge les fonctions String Contains , StartsWith , EndsWith et Equals . |
groupBy |
Non pris en charge. FetchXML prend en charge les options de regroupement qui ne sont pas disponibles avec le fournisseur de requêtes LINQ. Plus d’informations : Agréger des données à l’aide de FetchXmlAgréger des données à l’aide de FetchXml |
orderBy |
Prend en charge le tri par colonne de table, tel que Contact.FullName . |
select |
Prend en charge les types, constructeurs et initialiseurs anonymes. |
last |
L’opérateur last n’est pas pris en charge. |
skip et take |
Prend en charge skip et take à l’aide de la pagination côté serveur. La valeur skip doit être supérieure ou égale à la valeur take . |
aggregate |
Non pris en charge. FetchXML prend en charge les options d’agrégation qui ne sont pas disponibles avec le fournisseur de requêtes LINQ. Plus d’informations : Agréger des données à l’aide de FetchXml |
Filtrer plusieurs tables
Vous pouvez créer des requêtes Language Integrated Query (LINQ) .NET complexes dans Dataverse. Vous utilisez plusieurs clauses Join
avec des clauses de filtre pour créer un résultat qui est filtré sur les colonnes à partir de plusieurs tables.
L’exemple suivant indique comment créer une requête LINQ qui fonctionne avec deux tables et qui filtre le résultat basé sur des valeurs issues de chacune des lignes de table.
using (ServiceContext svcContext = new ServiceContext(_serviceProxy))
{
var query_where3 = from c in svcContext.ContactSet
join a in svcContext.AccountSet
on c.ContactId equals a.PrimaryContactId.Id
where a.Name.Contains("Contoso")
where c.LastName.Contains("Smith")
select new
{
account_name = a.Name,
contact_name = c.LastName
};
foreach (var c in query_where3)
{
System.Console.WriteLine("acct: " +
c.account_name +
"\t\t\t" +
"contact: " +
c.contact_name);
}
}
Voir aussi
Générer des requêtes avec LINQ (Language-Integrated Query .NET)
Utiliser la classe d’entités à liaison tardive avec une requête LINQ
Trier les résultats à l’aide des colonnes de table avec LINQ
Mettre en page d’importants ensembles de résultats avec LINQ
Exemple : Interrogation des données à l’aide de LINQ
Exemples de requêtes LINQ utilisant OrganizationServiceContext avec Microsoft Dataverse
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).