Laat gebonden entiteitsklasse gebruiken met een LINQ-query
Gepubliceerd: november 2016
Is van toepassing op: Dynamics CRM 2015
In Microsoft Dynamics CRM 2015 en Microsoft Dynamics CRM Online kunt u late binding met .NET Language-Integrated Query (LINQ)-query's gebruiken. Bij late binding wordt de logische naam van het kenmerk gebruikt en vindt afsluiting tijdens runtime plaats.
In dit onderwerp
Late binding gebruiken in een join-clausule
Late binding gebruiken in een linker join
Late binding en de methode Contains gebruiken
Late binding en operator Not Equals gebruiken
De methode GetAttributeValue gebruiken
Late binding gebruiken in een join-clausule
De volgende voorbeelden laten zien hoe u late binding kunt gebruiken in de join-clausule van een LINQ-query.
Haal de volledige naam op van de contactpersoon die de eerste contactpersoon vertegenwoordigt van een account en de accountnaam.
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
Haal gegevens over contactpersoon, account en potentiële klant op waarbij de potentiële klant en de achternaam van de contactpersoon niet "Parker" is.
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
Late binding gebruiken in een linker join
Het volgende voorbeeld laat zien hoe u een lijst met informatie over contactpersonen en account kunt ophalen via een linker join. Een linker join is ontworpen om bovenliggende elementen met en zonder onderliggende elementen uit twee bronnen als resultaat te geven. Er is een correlatie tussen het bovenliggende en het onderliggende element, maar er mag niet echt een onderliggend element bestaan.
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
Late binding en de methode Contains gebruiken
Het volgende voorbeeld laat zien hoe u late binding kunt gebruiken met de methode Contains in een LINQ-query.
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
Late binding en operator Not Equals gebruiken
Het volgende voorbeeld laat het gebruik van de operator Not Equals zien.
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
De methode GetAttributeValue gebruiken
Het volgende voorbeeld laat zien hoe u de contactpersoongegevens kunt ophalen met de methode 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
Zie ook
CreateQuery<TEntity>
Query's maken met LINQ (.NET Language Integrated Query)
Resultaten ordenen via entiteitskenmerken met LINQ
© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht