我有一些代码可以调用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>
,这可能是任何内容!
非常感谢任何建议或推荐阅读,谢谢!
答案 0 :(得分:7)
ClientRuntimeContext.Load<T>
Method 此方法的第二个参数指定应使用lambda表达式检索目标客户端对象(第一个参数)的哪些属性。
<强>实施例强>
在以下查询中,将检索除集合属性之外的所有属性,例如TermStore.Groups
的TermStore
client object
ctx.Load(termStore);
在下一个查询中,只会为TermStore
client object检索显式指定的属性列表(TermStore.Name
,TermStore.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
属性。