Utiliser la classe d’entités de liaison tardive avec une requête LINQ
Date de publication : novembre 2016
S’applique à : Dynamics CRM 2015
Dans Microsoft Dynamics CRM 2015 et Microsoft Dynamics CRM Online, vous pouvez utiliser la liaison tardive avec des requêtes Language-Integrated Query (LINQ) .NET. La liaison tardive utilise le nom logique de l’attribut, et est résolue au moment de l’exécution.
Contenu de la rubrique
Utilisation de la liaison tardive dans une clause de jointure
Utilisation de la liaison tardive dans une jointure gauche
Utilisation de la liaison tardive et de la méthode Contains
Utilisation de la liaison tardive et de l’opérateur différent
Utilisation de la méthode GetAttributeValue
Utilisation de la liaison tardive dans une clause de jointure
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);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_join2 = From c In orgSvcContext.CreateQuery("contact") _
Join a In orgSvcContext.CreateQuery("account") _
On c("contactid") Equals a("primarycontactid") _
Select New With {Key .contact_name = c("fullname"),
Key .account_name = a("name")}
For Each c In query_join2
Console.WriteLine(c.contact_name.ToString() & " " _
& c.account_name.ToString())
Next c
End Using
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"]);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim 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") _
Select New With {Key .Contact = c,
Key .Account = a,
Key .Lead = l}
For Each c In query_dejoin
Console.WriteLine(c.Account.Attributes("name").ToString() _
& " " _
& c.Contact.Attributes("fullname").ToString() _
& " " _
& c.Lead.Attributes("leadid").ToString())
Next c
End Using
Utilisation de la liaison tardive dans une jointure 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);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_join9 = From a In orgSvcContext.CreateQuery("account") _
Group Join c In orgSvcContext.CreateQuery("contact") _
On a("primarycontactid") Equals c("contactid") Into gr = _
Group From c_joined In gr.DefaultIfEmpty() _
Select New With {Key .account_name = a.Attributes("name")}
For Each c In query_join9
Console.WriteLine(c.account_name)
Next c
End Using
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);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_contains3 = From c In orgSvcContext.CreateQuery("contact") _
Where (CStr(c("description"))).Contains("Coho") _
Select New With
{Key .firstname = c.Attributes("firstname"),
Key .lastname = c.Attributes("lastname")}
For Each c In query_contains3
Console.WriteLine(c.firstname.ToString() & " " _
& c.lastname.ToString())
Next c
End Using
Utilisation de la liaison tardive et de l’opérateur différent
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);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim query_ne3 = From c In orgSvcContext.CreateQuery("contact") _
Where (Not c("address1_city").Equals(Nothing)) _
Select New With {Key .FirstName = c("firstname"),
Key .LastName = c("lastname"),
Key .Address1_City =
c("address1_city")}
For Each c In query_ne3
Console.WriteLine(c.FirstName.ToString() & " " _
& c.LastName.ToString() & " " _
& c.Address1_City.ToString())
Next c
End Using
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);
}
}
Using orgSvcContext As New OrganizationServiceContext(_serviceProxy)
Dim list_getattrib1 = ( _
From c In orgSvcContext.CreateQuery("contact") _
Where Not c.GetAttributeValue(Of Guid?)("contactid") _
.Value.Equals(_contactId1) _
Select New With
{
Key .FirstName = c.GetAttributeValue(Of String)("firstname"),
Key .LastName = c.GetAttributeValue(Of String)("lastname")}
).ToList()
For Each c In list_getattrib1
Console.WriteLine(c.FirstName & " " & c.LastName)
Next c
End Using
Voir aussi
CreateQuery<TEntity>
Générer des requêtes avec LINQ (Language-Integrated Query .NET)
Trier les résultats en utilisant les attributs d’entité avec LINQ
© 2017 Microsoft. Tous droits réservés. Copyright