2016-05-26 15 views
1

ich einen Code haben, die Anrufe zu einer Sharepoint-Managed-Metadaten-Service, der wie folgt beginnt macht:Verständnis ClientContext.Load der Parameter

var clientContext = new ClientContext("http://mysharepointsite/") 
    { AuthenticationMode = ClientAuthenticationMode.Default}; 

var taxonomySession = TaxonomySession.GetTaxonomySession(clientContext); 
var termStore = taxonomySession.GetDefaultSiteCollectionTermStore(); 

, die ich mit kein Problem haben. Aber danach haben wir:

clientContext.Load(termStore, 
     store => store.Name, 
     store => store.Groups.Include(
      group => group.Name, 
      group => group.TermSets.Include(
       termSet => termSet.Name, 
       termSet => termSet.Terms.Include(
        term => term.Name) 
      ) 
     ) 
); 

Kann mir bitte jemand helfen mir zu verstehen, was hier vor sich geht?

  • Zuerst dachte ich, das eine Art von LINQ-Abfrage, aber dann würde ich die Klasse erwartet, dass die Linie using System.Linq; haben, was es nicht tut.

  • Ich habe gerade bemerkt, dass es in Visual Studio einige IntelliSense, die wird der Anruf wie folgt strukturiert sagt, ist: void ClientruntimeContext.Load<T>(T clientObject, params System.Linq.Expressions.Expression<Func<T, object>>[] retrievals) - was sie macht es scheinen, wie Linq

  • Ich verstehe, dass der Code in irgendeiner Weise verwendet wird in gewisser Weise "Laden" der Termbankdaten in den verwalteten Metadatendienst von der gegebenen Sharepoint-Site, aber ich verstehe nicht ganz, was genau diese Syntax macht.

  • Ich habe das Codebeispiel von here, und es tut genau das, was ich will, aber ich würde mich viel wohler fühlen, wenn ich diese Syntax tatsächlich verstanden hätte!

  • The documentation war auch nicht besonders hilfreich, da es nur Load() s Parameter wie <T> definiert, was alles sein könnte!

Jeder Rat oder empfohlene Lesung wird sehr geschätzt, danke!

Antwort

4

ClientRuntimeContext.Load<T> Method

Der zweite Parameter dieser Methode gibt an, welche Eigenschaften von Ziel-Client-Objekt (erster Parameter) abgerufen werden sollen Lambda-Ausdrücke verwendet wird.

Beispiele

In der folgenden Abfrage werden alle Eigenschaften mit Ausnahme Sammlung Eigenschaften wie TermStore.Groups von TermStore client object wird

ctx.Load(termStore); 

In der nächsten Abfrage nur die explizit angegebenen Liste der Eigenschaften abgerufen werden (TermStore.Name, TermStore.Groups) wird abgerufen für TermStore client object:

ctx.Load(termStore, store => store.Name, store => store.Groups); 

Die nächste Frage entsteht, wie man angibt, welche Eigenschaften des Sammlungsclientobjekts, Include<TSource>(IQueryable<TSource>, \[\]) method Methode zu rettende Rettung hier zu erhalten.

Include<TSource>(IQueryable<TSource>, \[\]) method

Diese Methode zu begrenzen, was verwendete Eigenschaften aus einer Sammlung von Objekten zurückgeführt werden (für Leistungszwecke)

Beispiel

Der folgende Ausdruck

ctx.Load(termStore, store => store.Groups.Include(g => g.Name)); 

Tells, um die Abfrage so zu erstellen, dass siezurückgibt, die die Eigenschaft TermStore.Groups enthält, aber nicht die Standardeigenschaften von Group Clientobjekt, nur Group.Name Eigentum.