Share via


Utiliser la classe d’entités à liaison tardive avec une requête LINQ

Dans Microsoft Dataverse, vous pouvez utiliser la liaison tardive avec les requêtes LINQ (Language-Integrated Query) .NET. La liaison tardive utilise le nom logique de l’attribut, et est résolue au moment de l’exécution.

Utilisation d’une liaison tardive dans une clause JOIN

Les exemples suivants montrent comment utiliser la liaison tardive dans la clause join d’une requête LINQ.

Récuperez le nom complet du contact qui représente le contact principal d’un compte et le nom du compte.

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_join2 = from c in orgSvcContext.CreateQuery("contact")
                  join a in orgSvcContext.CreateQuery("account")
                  on c["contactid"] equals a["primarycontactid"]
                  select new
                  {
                   contact_name = c["fullname"],
                   account_name = a["name"]
                  };
foreach (var c in query_join2)
{
 System.Console.WriteLine(c.contact_name + "  " + c.account_name);
}
}

Récupérez les données de contact, de compte et de prospect où le prospect était le prospect d’origine et le nom du contact n’est pas « Parker ».

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_dejoin = from c in orgSvcContext.CreateQuery("contact")
                   join a in orgSvcContext.CreateQuery("account") 
                   on c["contactid"] equals a["primarycontactid"]
                   join l in orgSvcContext.CreateQuery("lead") 
                   on a["originatingleadid"] equals l["leadid"]
                   where (string)c["lastname"] != "Parker"
                   select new { Contact = c, Account = a, Lead = l };
foreach (var c in query_dejoin)
{
 System.Console.WriteLine(c.Account.Attributes["name"] + " " + 
  c.Contact.Attributes["fullname"] + " " + c.Lead.Attributes["leadid"]);
}
}

Utilisation d’une liaison tardive dans une jointure de gauche

L’exemple suivant explique comment récupérer la liste des informations propres au contact et au compte à l’aide d’une jointure gauche. Une jointure gauche est conçue pour retourner les parents avec et sans les enfants à partir de deux sources. Il existe une corrélation entre le parent et l’enfant, mais aucun enfant ne peut exister réellement.

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_join9 = from a in orgSvcContext.CreateQuery("account")
                  join c in orgSvcContext.CreateQuery("contact") 
                  on a["primarycontactid"] equals c["contactid"] into gr
                  from c_joined in gr.DefaultIfEmpty()
                  select new
                  {
                   account_name = a.Attributes["name"]
                  };
foreach (var c in query_join9)
{
 System.Console.WriteLine(c.account_name);
}
}

Utilisation de la liaison tardive et de la méthode Contains

L’exemple suivant montre comment utiliser la liaison tardive avec la méthode Contains dans une requête LINQ.

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_contains3 = from c in orgSvcContext.CreateQuery("contact")
                      where ((string)c["description"]).Contains("Coho")
                      select new
                      {
                       firstname = c.Attributes["firstname"],
                       lastname = c.Attributes["lastname"]
                      };
foreach (var c in query_contains3)
{
 System.Console.WriteLine(c.firstname + " " + c.lastname);
}
}

Utilisation de la liaison tardive et de l’opérateur NOT Equals

L’exemple suivant indique l’utilisation de l’opérateur différent.

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{
var query_ne3 = from c in orgSvcContext.CreateQuery("contact")
                where !c["address1_city"].Equals(null)
                select new
                {
                 FirstName = c["firstname"],
                 LastName = c["lastname"],
                 Address1_City = c["address1_city"]
                };
foreach (var c in query_ne3)
{
 System.Console.WriteLine(c.FirstName + " " + 
  c.LastName + " " + c.Address1_City);
}
}

Utilisation de la méthode GetAttributeValue

Cet exemple explique comment récupérer les informations de contact en utilisant la méthode GetAttributeValue.

using (OrganizationServiceContext orgSvcContext = new OrganizationServiceContext(_serviceProxy))
{

var list_getattrib1 = (from c in orgSvcContext.CreateQuery("contact")
                       where c.GetAttributeValue<Guid?>("contactid") != _contactId1
                       select new { 
                        FirstName = c.GetAttributeValue<string>("firstname"), 
                        LastName = c.GetAttributeValue<string>("lastname") 
                       }).ToList();
foreach (var c in list_getattrib1)
{
 System.Console.WriteLine(c.FirstName + " " + c.LastName);
}
}

Voir aussi

Générer des requêtes avec LINQ (Language-Integrated Query .NET)
Trier les résultats à l’aide des colonnes de table avec LINQ
CreateQuery<TEntity>()

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é).