Del via


Bruge LINQ til at oprette en forespørgsel

 

Udgivet: januar 2017

Gælder for: Dynamics 365 (online), Dynamics 365 (on-premises), Dynamics CRM 2016, Dynamics CRM Online

Forespørgselsudbyderen .NET-sprogintegreret forespørgsel (LINQ) i Microsoft Dynamics 365 (online og i det lokale miljø) 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.ContactSet
select 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.ContactSet
join 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.AccountSet
where (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 eller ydre joinforbindelse. Der understøttes kun venstre 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 365 og Microsoft Dynamics 365 (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 4-driver til Dynamics CRM RESTEN/Web API er tilgængelig på CodePlex

Microsoft Dynamics 365

© 2017 Microsoft. Alle rettigheder forbeholdes. Ophavsret