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

使用.NET Graph SDK获取SharePoint Online列表项数量遇异常咨询

解决Graph SDK获取SharePoint列表项数量的报错问题

你遇到的报错是因为/sites/{siteId}/lists/{listId}/items端点确实不支持$count查询参数,直接添加count=true会触发invalidRequest异常,但获取列表项数量的操作完全可以实现,分两种场景处理:

场景1:获取列表所有项的总数量(无筛选条件)

直接请求列表对象的itemCount属性即可,这个属性是SharePoint维护的内置统计值,不需要遍历所有项,性能最优。

修改后的代码示例:

public async Task<int> GetListItemsCountAsync(string siteId, string listId)
{
    var list = await _graphService.Client
        .Sites[siteId]
        .Lists[listId]
        .Request()
        .Select("itemCount") // 仅请求需要的属性,减少数据传输量
        .GetAsync();

    return list?.ItemCount ?? 0;
}

场景2:获取筛选后的项数量(带查询条件)

如果需要统计符合特定筛选条件的项数量,需调整请求方式:

  • 使用/items/microsoft.graph.listItem/$count专用计数端点
  • 必须添加请求头ConsistencyLevel: eventual(这是Graph API支持筛选后计数的必要条件)

代码示例:

public async Task<int> GetFilteredItemsCountAsync(string siteId, string listId, string filterQuery)
{
    var request = _graphService.Client
        .Sites[siteId]
        .Lists[listId]
        .Items
        .Count
        .Request();

    // 添加筛选条件
    if (!string.IsNullOrEmpty(filterQuery))
    {
        request.QueryOptions.Add(new QueryOption("$filter", filterQuery));
    }

    // 强制添加ConsistencyLevel请求头
    request.Headers.Add("ConsistencyLevel", "eventual");

    return await request.GetAsync();
}

注意:这种方式会实际执行筛选并统计数量,性能略逊于直接取itemCount,但远优于获取所有项再计数的方案。

内容的提问来源于stack exchange,提问作者Rubén

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:45:27