如何:检索列表

上次修改时间: 2011年4月29日

适用范围: SharePoint Foundation 2010

本文内容
检索网站中所有列表的所有属性
只检索列表的指定属性
在集合中存储检索到的列表
向列表检索应用筛选器
从网站检索列表字段

在 SharePoint Online 中提供

使用列表对象与使用网站对象类似。首先使用 ClientContext() 构造函数 (JavaScript: ClientContext(serverRelativeUrl)) 并传递 URL 或 URI 以返回特定的请求上下文。然后,可以使用 Web 类 (JavaScript: Web) 的 Lists 属性 (JavaScript: lists) 获取网站中的列表集合。

检索网站中所有列表的所有属性

若要返回网站的所有列表,可通过 Load<T>(T, []) 方法 (JavaScript: load(clientObject)) 加载列表集合,然后调用 ExecuteQuery()ExecuteQueryAsync(ClientRequestSucceededEventHandler, ClientRequestFailedEventHandler) (JavaScript: executeQueryAsync(succeededCallback, failedCallback))。以下示例显示了网站的 URL 以及创建列表的日期和时间。

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveAllListProperties
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            clientContext.Load(collList);

            clientContext.ExecuteQuery();

            foreach (SP.List oList in collList)
            {
                Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString());
            }
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveAllListProperties

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            clientContext.Load(collList)

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In collList
                Console.WriteLine("Title: {0} Created: {1}", oList.Title, oList.Created.ToString())
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveAllListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();
 
    clientContext.load(collList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' Created: ' + oList.get_created().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

只检索列表的指定属性

上面的示例返回了网站中列表的所有属性,但是为了减少客户端与服务器之间不必要的数据传输,您可以使用 LINQ 查询表达式指定要返回的属性。以下示例在 LINQ 表达式内使用 Include<TSource>(IQueryable<TSource>, []) 方法,以便只返回集合中每个列表的标题和 ID。

备注

如以下 ECMAScript(JavaScript、JScript) 示例所示,您可以指定 Include 作为传递给 load(clientObject)) 方法的查询字符串的一部分,以指定要返回的属性。

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListProperties
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            clientContext.Load(
                collList,
                lists => lists.Include(
                    list => list.Title, 
                    list => list.Id));

            clientContext.ExecuteQuery();

            foreach (SP.List oList in collList)
            {
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
            }
        }
   }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListProperties

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            clientContext.Load(collList, Function(lists) lists. _
                                             Include(Function(list) list.Title, _
                                                     Function(list) list.Id))
            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In collList
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListProperties() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    this.collList = oWebsite.get_lists();

    clientContext.load(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}
function onQuerySucceeded() {

    var listInfo = '';

    var listEnumerator = collList.getEnumerator();

    while (listEnumerator.moveNext()) {
        var oList = listEnumerator.get_current();
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString() + '\n';
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

在上面的示例中,在调用 ExecuteQuery() (JavaScript: executeQueryAsync(succeededCallback, failedCallback)) 后,只有每个列表对象的标题和 ID 变得可用。如果尝试显示 oList.ParentWebUrl 等内容,将会收到 PropertyOrFieldNotInitializedException

在集合中存储检索到的列表

如以下示例所示,您可以使用 LoadQuery() 方法 (JavaScript: loadQuery(clientObjectCollection, exp)) 来代替 Load<T>(T, []) 方法 (JavaScript: load(clientObject)),以便在另一集合中存储返回值,而不是将其存储在 Lists 属性 (JavaScript: lists) 中。

using System;
using System.Collections.Generic;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListPropertiesToCollection
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
                collList.Include(
                    list=>list.Title,
                    list=>list.Id));

            clientContext.ExecuteQuery();

            foreach (SP.List oList in resultCollection)
            {
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"));
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListPropertiesToCollection

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            Dim queryResult As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
                collList.Include(Function(list) list.Title, _
                                 Function(list) list.Id))

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In queryResult
                Console.WriteLine("Title: {0} ID: {1}", oList.Title, oList.Id.ToString("D"))
            Next oList
        End Sub        
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveSpecificListPropertiesToCollection() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var collList = oWebsite.get_lists();

    this.listInfoCollection = clientContext.loadQuery(collList, 'Include(Title, Id)');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoCollection.length; i++) {
        var oList = this.listInfoCollection[i];
        listInfo += 'Title: ' + oList.get_title() + ' ID: ' + oList.get_id().toString();
    }
    alert(listInfo.toString());
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

向列表检索应用筛选器

可以使用 LINQ lambda 表达式语法或 LINQ 查询表达式语法来创建筛选器,以限制在查询中检索的列表。这要求您设置对 System.Linq 命名空间的引用。

以下示例修改了上面的示例,它使用 lambda 表达式作为 LoadQuery() 方法的参数,以便只返回包含项且未处于隐藏状态的列表。

备注

当您使用 LINQ 针对客户端对象模型创建查询时,需使用 LINQ to Objects 而不是 LINQ to SharePoint 提供程序,只有在对服务器对象模型编写代码时,才能使用 LINQ to SharePoint 提供程序。

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
             collList.Include(
                 list => list.Title,
                 list => list.Id).Where(
                     list => list.ItemCount != 0
                         && list.Hidden != true));
    Dim resultCollection As IEnumerable(Of SP.List) = _
             clientContext.LoadQuery(collList.Include( _
                                     Function(list) list.Title, _
                                     Function(list) list.Id).Where( _
                                     Function(list) list.ItemCount <> 0 _
                                         AndAlso list.Hidden <> True))

若要使用标准 LINQ 查询语法,LoadQuery() 方法的参数应如下所示。

    var queryExpression = from list
                          in collList.Include(
                              list => list.Title,
                              list => list.Id)
                          where list.ItemCount != 0
                              && list.Hidden != true
                          select list;

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(queryExpression);
    Dim queryExpression = From list In collList.Include( _
                              Function(list) list.Title, Function(list) list.Id) _
                          Where list.ItemCount <> 0 _
                              AndAlso list.Hidden <> True _
                          Select list

    Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(queryExpression)

以下示例演示了如何使用 LINQ 语法只检索网站中的前两个列表。

    IEnumerable<SP.List> resultCollection = clientContext.LoadQuery(
             collList.Take(2).Include(
                 list => list.Title,
                 list => list.Id));
    Dim resultCollection As IEnumerable(Of SP.List) = clientContext.LoadQuery(collList.Take(2) _
             .Include(Function(list) list.Title, _
             Function(list) list.Id))

备注

Microsoft SharePoint Foundation 2010 中的 JavaScript 对象模型的 loadQuery(clientObjectCollection, exp) 方法不支持上一代码片段中的托管对象模型所使用的以下 LINQ 方法和运算符:Where<TSource>(IQueryable<TSource>, Expression<Func<TSource, Boolean>>)Take<TSource>(IQueryable<TSource>, Int32)、<>。

从网站检索列表字段

如以下示例所示,您可以将 Include<TSource>(IQueryable<TSource>, []) 方法或 Include 语句嵌套在 JavaScript 查询中,以返回列表及其字段的元数据。该示例返回网站中所有列表的所有字段,并显示其内部名称包含字符串"name"的所有字段的标题和内部名称。

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class RetrieveSpecificListPropertiesToCollection
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";

            ClientContext clientContext = new ClientContext(siteUrl);
            Web oWebsite = clientContext.Web;
            ListCollection collList = oWebsite.Lists;

            IEnumerable<SP.List> listInfo = clientContext.LoadQuery(
                collList.Include(
                    list => list.Title,
                    list => list.Fields.Include(
                        field => field.Title,
                        field => field.InternalName)));
 
             clientContext.ExecuteQuery();

            foreach (SP.List oList in listInfo)
            {
                FieldCollection collField = oList.Fields;

                foreach (SP.Field oField in collField)
                {
                    Regex regEx = new Regex("name", RegexOptions.IgnoreCase);
                    
                    if (regEx.IsMatch(oField.InternalName))
                    {
                        Console.WriteLine("List: {0} \n\t Field Title: {1} \n\t Field Internal Name: {2}", 
                            oList.Title, oField.Title, oField.InternalName);
                    }
                }
            }
        }
    }
}
Imports System
Imports System.Text.RegularExpressions
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class RetrieveSpecificListPropertiesToCollection

        Shared Sub Main()

            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"

            Dim clientContext As New ClientContext(siteUrl)
            Dim oWebsite As Web = clientContext.Web
            Dim collList As ListCollection = oWebsite.Lists

            Dim listInfo As IEnumerable(Of SP.List) = clientContext.LoadQuery( _
                collList.Include( _
                    Function(list) list.Title, _
                    Function(list) list.Fields.Include( _
                        Function(field) field.Title, _
                        Function(field) field.InternalName)))

            clientContext.ExecuteQuery()

            Dim oList As SP.List
            For Each oList In listInfo
                Dim collField As FieldCollection = oList.Fields

                Dim oField As SP.Field
                For Each oField In collField

                    Dim regEx As New Regex("name", RegexOptions.IgnoreCase)

                    If regEx.IsMatch(oField.InternalName) Then
                        Console.WriteLine("List: {0} " + _
                            ControlChars.Lf + ControlChars.Tab + " Field Title: {1} " + _
                            ControlChars.Lf + ControlChars.Tab + " Field Internal Name: {2}", _
                            oList.Title, oField.Title, oField.InternalName)
                    End If
                Next oField
            Next oList
        End Sub 
    End Module
End Namespace
var siteUrl = '/sites/MySiteCollection';

function retrieveAllListsAllFields() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oWebsite = clientContext.get_web();
    var rootWebsite = clientContext.get_site().get_rootWeb();
    var collList = oWebsite.get_lists();

    this.listInfoArray = clientContext.loadQuery(collList, 
        'Include(Title,Fields.Include(Title,InternalName))');

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), 
        Function.createDelegate(this, this._onQueryFailed));
}

function onQuerySucceeded() {

    var listInfo = '';

    for (var i = 0; i < this.listInfoArray.length; i++) {
            
        var oList = this.listInfoArray[i];
        var collField = oList.get_fields();
            
        var fieldEnumerator = collField.getEnumerator();
            
        while (fieldEnumerator.moveNext()) {
            var oField = fieldEnumerator.get_current();
            var regEx = new RegExp('name', 'ig');
            
            if (regEx.test(oField.get_internalName())) {
                listInfo += '\nList: ' + oList.get_title() + 
                    '\n\tField Title: ' + oField.get_title() + 
                    '\n\tField Name: ' + oField.get_internalName();
            }
        }
    }
    alert(listInfo);
}

function onQueryFailed(sender, args) {
    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

有关如何在 SharePoint Foundation 2010 Silverlight 对象模型上下文中检索列表数据的信息和示例,请参阅使用 Silverlight 对象模型

请参阅

概念

数据检索概述

客户端对象模型准则

如何:创建、更新和删除列表

常见编程任务

其他资源

客户端类库

ECMAScript 类库