Delen via


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:

var query1 = from c in context.ContactSetselect c;

De methode CreateQuery gebruiken:

var query1 = from c in context.CreateQuery<Contact>()select c;

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.

from c in context.ContactSetjoin a in context.AccountSet on c.ContactId equals a.PrimaryContactId.Id

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.

from a in context.AccountSetwhere (a.Name.StartsWith("Contoso") && a.Address1_StateOrProvince == "WA")

orderby

De orderby operator zet de gevonden querykenmerken in een bepaalde order.

var query1 = from c in context.CreateQuery<Contact>()   orderby c.FullName ascending   select c;foreach ( var q in query1)   {   Console.WriteLine(q.FirstName + " " + q.LastName);   }

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.

select new Contact   {   ContactId = c.ContactId,   FirstName = c.FirstName,   LastName = c.LastName,   Address1_Telephone1 = c.Address1_Telephone1   };

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: " &amp; c.account_name &amp; vbTab &amp; vbTab _
                    &amp; vbTab &amp; "contact: " &amp; 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