Utilizzare la classe entità con associazione tardiva con una query LINQ
Data di pubblicazione: gennaio 2017
Si applica a: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online
In Microsoft Dynamics 365 e Microsoft Dynamics 365 (online), è possibile utilizzare l'associazione tardiva con query di .NET Language Integrated Query (LINQ). L'associazione tardiva utilizza il nome logico dell'attributo e viene risolto in fase di esecuzione.
In questo argomento
Utilizzo dell'associazione tardiva in una clausola di join
Utilizzo dell'associazione tardiva in un left join
Utilizzo dell'associazione tardiva e il metodo Contiene
Utilizzo dell'associazione tardiva e dell'operatore di disuguaglianza
Uso del metodo GetAttributeValue
Utilizzo dell'associazione tardiva in una clausola di join
Nell'esempio seguente viene illustrato come utilizzare l'associazione tardiva nella clausola di join di una query LINQ.
Recuperare il nome completo del contatto che rappresenta il contatto primario per un account e il nome account.
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
Recuperare i dati Contatto, Account e Lead in cui il Lead era il Lead di origine e il cognome del Contatto non è "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
Utilizzo dell'associazione tardiva in un left join
Nell'esempio seguente viene illustrato come recuperare un elenco di informazioni su Contatto e Account utilizzando un left join. Un left join è progettato in modo da restituire elementi padre con e senza figli da due diverse fonti. Esiste una correlazione tra padre e figlio, ma nessun figlio può esistere realmente.
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
Utilizzo dell'associazione tardiva e il metodo Contiene
Nell'esempio seguente viene illustrato come utilizzare l'associazione tardiva con il metodo Contains in una query 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
Utilizzo dell'associazione tardiva e dell'operatore di disuguaglianza
Nell'esempio di seguito viene illustrato come usare l'operatore di disuguaglianza.
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
Uso del metodo GetAttributeValue
Nell'esempio seguente viene illustrato come recuperare informazioni di contatto utilizzando il metodo 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
Vedere anche
CreateQuery<TEntity>
Creare query con LINQ (.NET language-integrated query)
Ordine dei risultati usando gli attributi di entità con LINQ
Microsoft Dynamics 365
© 2017 Microsoft. Tutti i diritti sono riservati. Copyright