Del via


Bruge LINQ til at oprette en forespørgsel

 

Udgivet: november 2016

Gælder for: Dynamics CRM 2015

Forespørgselsudbyderen .NET-sprogintegreret forespørgsel (LINQ) i Microsoft Dynamics CRM 2015 og opdatering til Microsoft Dynamics CRM Online 2015 bruger LINQ-standardsyntaks. Det første trin i oprettelsen af en forespørgsel i LINQ er at identificere de relevante objekttyper og deres indbyrdes relationer. Du kan derefter angive datakilden og de andre forespørgselsparametre.

Delsætningen from bruges til at returnere et enkelt "rod"-objekt. Forespørgselsudbyderen kan kun returnere objekter af en enkelt objekttype. Delsætningerne orderby og select skal referere til dette rodobjekt. Du kan bruge join -delsætninger til at føje objekter med en relation til objektet "rod".

Dette emne indeholder

LINQ-operatorer

LINQ-begrænsninger

Filtrer flere objekter

LINQ-operatorer

Alle LINQ-forespørgselsudtryk har samme format. Følgende tabel viser de mest almindelige delsætninger i et LINQ-forespørgselsudtryk, når du bruger Microsoft Dynamics 365 LINQ-forespørgselsudbyderen.

LINQ-operator

Beskrivelse

Eksempel

Få en datakilde (delsætningen from)

Når du bruger den genererede tjenestekontekst og tidlig binding, skal du bruge objektet IQueryable, som f.eks. AccountSet, i den genererede kontekst.

Når du ikke bruger den genererede kontekst, giver metoden CreateQuery i organisationens servicekontekstobjekt dig adgang til Microsoft Dynamics 365 objekter.

Brug af genereret servicekontekst:

var query1 = from c in context.ContactSetselect c;

Brug af metoden CreateQuery:

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

join-delsætning

Delsætningen join repræsenterer en indre joinforbindelse. Du kan bruge delsætningen til at arbejde med to eller flere objekter, der kan joinforbindes med en fælles attributværdi.

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

Filtrering (delsætningen where)

Delsætningen where gælder for et filter for de resultater, der ofte bruger et boolesk udtryk. Filteret angiver, hvilke elementer der skal udelades fra kildeserien. Hver where-delsætning kan kun indeholde betingelser mod en enkelt objekttype. En sammensat betingelse, der omfatter flere objekter, er ikke gyldig. I stedet skal hvert objekt filtreres i separate where-delsætninger.

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

orderby

Operatoren orderby placerer returnerede forespørgselsattributter i en bestemt rækkefølge.

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-delsætning

Delsætningen select definerer form af data, der returneres. Delsætningen opretter et kolonnesæt, der er baseret på resultaterne af forespørgslens udtryk. Du kan også angive en forekomst af et nyt objekt, der skal arbejdes med. Det nyoprettede objekt, der bruger delsætningen select, oprettes ikke på serveren, men er en lokal forekomst.

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

LINQ-begrænsninger

LINQ-forespørgselsudbyderen understøtter et undersæt af LINQ-operatorer. Ikke alle betingelser, der kan udtrykkes i LINQ, understøttes. I følgende tabel vises nogle af begrænsningerne i de grundlæggende LINQ-operatorer.

LINQ-operator

Begrænsninger

join

Repræsenterer en indre joinforbindelse. Du kan ikke udføre ydre joinforbindelser.

from

Understøtter en from-delsætning pr. forespørgsel.

where

Venstre side af udtrykket skal være et attributnavn, og højre side af udtrykket skal være en værdi. Du kan ikke angive en konstant i venstre side. Begge sider af udtrykket må ikke være konstanter.

Understøtter String-funktionerne Contains, StartsWith, EndsWith og Equals.

groupBy

Understøttes ikke. FetchXML understøtter indstillinger for gruppering, der ikke er tilgængelige med udbyderen af LINQ-forespørgsel.Flere oplysninger:Brug af FetchXML-aggregering

orderBy

Understøtter sortering af objektattributter, som Contact.FullName.

select

Understøtter anonyme typer, konstruktører og initialisering.

last

Operatoren last understøttes ikke.

skip og take

Understøtter skip og take ved hjælp af serverbaseret sideinddeling. Værdien skip skal være større end eller lig med værdien take.

aggregate

Understøttes ikke. FetchXML understøtter indstillinger for aggregering der ikke er tilgængelige med udbyderen af LINQ-forespørgsel.Flere oplysninger:Brug af FetchXML-aggregering

Filtrer flere objekter

Du kan oprette komplekse .NET-sprogintegreret forespørgsel (LINQ)-forespørgsler i Microsoft Dynamics CRM 2015 og Microsoft Dynamics CRM Online. Du kan bruge flere Join-delsætninger med filtreringsdelsætninger til at oprette et resultat, der er filtreret på attributter fra flere objekter.

Følgende eksempel viser, hvordan du opretter en forespørgsel i LINQ, der fungerer med to objekter og filtrerer det resultat, der er baseret på værdier fra hver af objekterne.


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

Se også

Eksempel: Oprettelse af en LINQ-forespørgsel
Eksempel: Komplekse LINQ-forespørgsler
Opret forespørgsler med LINQ (.NET-sprogintegreret forespørgsel)
Brug sent bunden objektklasse med en LINQ-forespørgsel
Blog: LINQPad plug-in'en til Microsoft Dynamics CRM 2011

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret