关于vb.net:通过FileLeafRef查询时,sharepoint caml查询不起作用

sharepoint caml query isn't working when querying by FileLeafRef

我想从特定共享点站点中名为" Pages "的列表中检索特定项目。我希望查询仅返回与我正在查询的FileLeafRef关联的特定项目。我已经构建了一个CAML查询,并已经通过使用SP CAML查询帮助工具进行了测试,因此我认为CAML查询很好。我只是想不通如何使用客户端上下文来查询商品。这是我现有的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    Dim FileLeafRef As String ="SomeArbitrarilyNamedThing.aspx"

    Dim clientContext As New Microsoft.SharePoint.Client.ClientContext("http://myfqdn/newsandmedia/companynews")
    Dim theList As Microsoft.SharePoint.Client.List = clientContext.Web.Lists.GetByTitle("Pages")

    Dim camlQuery As New Microsoft.SharePoint.Client.CamlQuery()

    camlQuery.ViewXml = String.Format("<Query><Where><Eq><FieldRef Name=""FileLeafRef"" /><Value Type=""Text"">{0}</Value></Eq></Where></Query>", FileLeafRef)
    Console.WriteLine(camlQuery.ViewXml)


    Dim listItems As Microsoft.SharePoint.Client.ListItemCollection = theList.GetItems(camlQuery)

    clientContext.Load(theList)
    clientContext.Load(listItems)
    clientContext.ExecuteQuery()

在调用ExecuteQuery之后,当我看一下listItems集合时,它具有多个我要查询的项目。 (特别是它有15个,但是所请求的FileLeafRef应该只有一个项目)。任何人都可以通过识别此代码出什么问题来帮助我吗?

谢谢

编辑:我之后发现,如果我用View标记packagecamlQuery xml,它将返回我想要的列表项。我不知道为什么。任何人都可以解释这些标记在这种情况下的作用,以及为什么查询最初返回15个结果而不是仅返回1个结果?


发生这种情况是因为客户端上下文CamlQuery对象不仅接受查询,而且接受整个视图。这就是为什么您需要提供View xml的原因。您可以在此处找到视图元素结构。

可能最初它返回了15个项目,因为您认为xml不正确。我猜它返回了列表中的所有项目。在使用服务器对象模型时,我已经看到过这种行为-如果您的caml查询结构不正确或有任何错误,则将返回所有列表项。