了解ClientContext.Load的参数

时间:2016-05-26 08:55:39

标签: c# linq sharepoint lambda

我有一些代码可以调用SharePoint Managed Metadata Service,就像这样开始:

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

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

我没有问题。但是,在此之后我们有:

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)
            )
        )
);

有人可以帮我理解这里发生了什么吗?

  • 起初我认为这是某种LINQ查询,但后来我希望这个类有using System.Linq;行,但它没有。

  • 我刚才注意到在Visual Studio中有一些IntelliSense,它表示调用的结构如下:void ClientruntimeContext.Load<T>(T clientObject, params System.Linq.Expressions.Expression<Func<T, object>>[] retrievals) - 这使得它似乎以某种方式使用Linq

  • 我知道代码是以某种方式&#34; loading&#34;来自给定sharepoint站点的托管元数据服务中的术语库数据,但我不太清楚该语法到底在做什么。

  • 我从here获得了代码示例,它完全符合我的要求,但如果我真的理解了这种语法,我会觉得更舒服!

  • The documentation也没有特别帮助,因为它只将Load()的参数定义为<T>,这可能是任何内容!

非常感谢任何建议或推荐阅读,谢谢!

1 个答案:

答案 0 :(得分:7)

ClientRuntimeContext.Load<T> Method

此方法的第二个参数指定应使用lambda表达式检索目标客户端对象(第一个参数)的哪些属性。

<强>实施例

在以下查询中,将检索除集合属性之外的所有属性,例如TermStore.GroupsTermStore client object

ctx.Load(termStore);

在下一个查询中,只会为TermStore client object检索显式指定的属性列表(TermStore.NameTermStore.Groups):

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

出现下一个问题,如何指定要检索的集合客户端对象的哪些属性,Include<TSource>(IQueryable<TSource>, \[\]) method方法在这里得到了解决。

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

此方法用于限制从对象集合返回的属性(出于性能目的)

示例

以下表达式

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

告诉构造查询以返回TermStore client object,其中包含TermStore.Groups属性,但不包含Group客户端对象的默认属性,只有Group.Name属性。