You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Microsoft.SharePoint.Client C#仅获取用户创建的列表(排除文档库)

如何仅检索SharePoint中的用户自定义列表

嘿,这个问题我之前在开发SharePoint应用时也踩过坑,刚好有几个简便的方法可以帮你精准过滤出用户自定义的列表,排除系统生成项和文档库:

方法1:利用BaseTemplate模板ID过滤

SharePoint里不同类型的列表/库都对应唯一的模板ID,我们可以通过筛选特定ID锁定目标:

  • 用户创建的基础自定义列表模板ID是100
  • 文档库的模板ID是101(直接排除这个就能去掉所有文档库)
  • 系统自带的列表比如MicroFeed(ID109)、讨论板(ID108)、通知列表(ID104)等都有专属ID

如果用REST API请求,直接在URL里加过滤条件:

GET _api/web/lists?$filter=BaseTemplate eq 100

要是需要包含用户创建的任务列表(ID106)、联系人列表(ID107)这类常用自定义类型,可扩展过滤条件:

GET _api/web/lists?$filter=BaseTemplate eq 100 or BaseTemplate eq 106 or BaseTemplate eq 107

方法2:结合IsSystemList属性双重过滤

有些系统列表的模板ID比较特殊,这时可以搭配IsSystemList属性——这个布尔值标记了列表是否为系统内置:

  • 用户自定义列表的IsSystemList为false
  • 大部分系统列表的IsSystemList为true

注意:文档库的IsSystemList是false,所以需要同时排除模板ID101。用REST API的话就是:

GET _api/web/lists?$filter=IsSystemList eq false and BaseTemplate ne 101

如果用CSOM(C#)代码实现,示例如下:

using (var context = new ClientContext("your-site-url"))
{
    var targetLists = context.Web.Lists;
    // 加载符合条件的列表:非系统列表 + 不是文档库
    context.Load(targetLists, 
        lists => lists.Where(list => !list.IsSystemList && list.BaseTemplate != 101));
    context.ExecuteQuery();

    // 遍历处理用户自定义列表
    foreach (var list in targetLists)
    {
        Console.WriteLine($"列表名称:{list.Title}");
    }
}

小提示

如果遇到特殊的用户创建列表(比如自定义模板生成的),可以先通过GET _api/web/lists查看所有列表的BaseTemplate和IsSystemList值,再调整过滤条件,确保不会遗漏目标列表。

内容的提问来源于stack exchange,提问作者Stephen McCormick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 04:19:05