LINQ gebruiken om een query te construeren
Gepubliceerd: november 2016
Is van toepassing op: Dynamics CRM 2015
De .NET Language-Integrated Query (LINQ) queryprovider in Microsoft Dynamics CRM 2015 en Microsoft Dynamics CRM Online 2015 Update gebruikt standaard LINQ-syntaxis. De eerste stap bij het maken van een LINQ-query is de relevante entiteitstypen en relaties tussen hen te identificeren. U kunt de gegevensbron en de anderen queryparameters vervolgens opgeven.
De component from wordt gebruikt om één "hoofdmap"-entiteit te vinden. De queryprovider kan alleen entiteiten van één entiteitstype opleveren. De orderby en select componenten moeten naar deze hoofdmapentiteit verwijzen. U kunt join componenten gebruiken om entiteiten die een relatie hebben met de "hoofdmap"-entiteit toe te voegen.
In dit onderwerp
LINQ-Operatoren
LINQ-Beperkingen
Filter meerdere entiteiten
LINQ-Operatoren
Alle LINQ-query-expressies hebben een vergelijkbare indeling. De volgende tabel bevat de meest voorkomende componenten in een LINQ-query-expressie bij het gebruik van de queryprovider LINQ van Microsoft Dynamics 365.
LINQ-Operator |
Beschrijving |
Voorbeeld |
---|---|---|
Schaf een gegevensbron aan (de from component) |
Als u de gegenereerde servicecontext en vroegtijdige binding gebruikt, gebruikt u de entiteitset IQueryable, zoals AccountSet, in de gegenereerde context. Bij het niet gebruiken van de gegenereerde context, geeft de methode CreateQuery in het contextobject van de organisatieservice u toegang tot Microsoft Dynamics 365 - entiteiten. |
Het gebruik van de gegenereerde servicecontext:
De methode CreateQuery gebruiken:
|
join component |
De component join geeft een inner join weer. Gebruikt u de component om te werken met twee of meer entiteiten die met een gemeenschappelijke kenmerkwaarde kunnen worden samengevoegd. |
|
Filtering (de where component) |
De where component past een filter toe op de resultaten, vaak met gebruik van een Boole-expressie. Het filter specificeert welke elementen van de bronvolgorde uit te sluiten. Elke where component kan alleen voorwaarden tegen één entiteitstype bevatten. Een samengestelde voorwaarde die meerdere entiteiten omvat is ongeldig. In plaats daarvan moet elke entiteit in afzonderlijke where componenten worden gefilterd. |
|
orderby |
De orderby operator zet de gevonden querykenmerken in een bepaalde order. |
|
select component |
De select component definieert de vorm van de gevonden gegevens. De component maakt een kolomset gebaseerd op de query-expressieresultaten. U kunt ook een exemplaar van een nieuw object om mee te werken definiëren. Het zojuist gemaakte object dat de select component gebruikt is niet gemaakt op de server, maar is een lokaal exemplaar. |
|
LINQ-Beperkingen
De LINQ-queryprovider ondersteunt een subset van de LINQ-operatoren. Niet alle voorwaarden die kunnen worden getoond in LINQ worden ondersteund. In de volgende tabel ziet u een aantal van de beperkingen van de basis-LINQ-operatoren.
LINQ-Operator |
Beperkingen |
---|---|
join |
Geeft een inner join weer. U kunt geen outer joins uitvoeren. |
from |
Ondersteunt één from component per query. |
where |
Aan de linkerkant van de component moet een kenmerknaam staan en aan de rechterkant van de component moet een waarde staan. U kunt aan de linkerkant geen constante instellen. De beide kanten van de component kunnen geen constantes zijn. Ondersteunt de String functies Contains, StartsWith, EndsWith, en Equals. |
groupBy |
Niet ondersteund. FetchXML ondersteunt het groeperen van opties die niet beschikbaar zijn in de LINQ-queryprovider.Meer informatie:FetchXML-samenvoeging gebruiken |
orderBy |
Ondersteunt orderen op entiteitskenmerken, zoals Contact.FullName. |
select |
Ondersteunt anonieme typen, constructors, en initializers. |
last |
De operator last wordt niet ondersteund. |
skip en take |
Ondersteunt skip en take met server-side paginering. De skip waarde moet groter zijn dan of gelijk zijn aan de take waarde. |
aggregate |
Niet ondersteund. FetchXML ondersteunt het samenvoegen van opties die niet beschikbaar zijn in de LINQ-queryprovider.Meer informatie:FetchXML-samenvoeging gebruiken |
Filter meerdere entiteiten
U kunt complexe query's .NET Language-Integrated Query (LINQ) in Microsoft Dynamics CRM 2015 en Microsoft Dynamics CRM Online maken. U gebruikt verschillende componenten Join met filtercomponenten om een resultaat te creëren dat op kenmerken van verschillende entiteiten wordt gefilterd.
Dit voorbeeld laat zien hoe u een LINQ-query maakt dat werkt met twee entiteiten en het resultaat op basis van de waarden van elke entiteit filtert.
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);
}
}
Using svcContext As New ServiceContext(_serviceProxy)
Dim query_where3 = From c In svcContext.ContactSet _
Join a In svcContext.AccountSet _
On c.ContactId Equals a.account_primary_contact.Id _
Where a.Name.Contains("Contoso") _
Where c.LastName.Contains("Smith") _
Select New With {Key .account_name = a.Name,
Key .contact_name = c.LastName}
For Each c In query_where3
Console.WriteLine("acct: " & c.account_name & vbTab & vbTab _
& vbTab & "contact: " & c.contact_name)
Next c
End Using
Zie ook
Voorbeeld: Een LINQ-query maken
Voorbeeld: Complexe LINQ-query's
Query's maken met LINQ (.NET Language Integrated Query)
Laat gebonden entiteitsklasse gebruiken met een LINQ-query
Blog: LINQPad invoegtoepassing voor MS Dynamics CRM 2011
© 2017 Microsoft. Alle rechten voorbehouden. Auteursrecht