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

如何修改查询代码无需手动限制ReadByQuery的PageSize参数

问题根因

空返回和PageSize的数值本身没有关系,是代码逻辑错误导致的:

  • 当返回数据量小于你设置的PageSize时,result.NumRemaining会直接返回0,而你把数据序列化、返回的逻辑全写在了while (result.NumRemaining > 0)的循环块里,这种场景下循环不会触发,代码直接走到最后的return "",自然就返回空。
  • 额外提一句,你原来的循环逻辑只设计为执行1次就返回,也完全没处理多分页拉取的需求,相当于分页逻辑是无效的。

修复方案

修改后不需要手动调整PageSize,不管数据量是否超过单页大小都能正常返回结果:

public static string Run(ILogger logger)       
{
    OnlineClient client = Bootstrap.Client(logger);
    ReadByQuery query = new ReadByQuery()
    {
        ObjectName = "CONTACT",
        PageSize = 1000, // 可以保留固定值,也可以直接删掉这行用第三方库默认分页大小,不需要随数据量调整
        Fields =
        {
            "RECORDNO"
        }

    };
    logger.LogInformation("Executing query to Intacct API");
    Task<OnlineResponse> task = client.Execute(query);
    task.Wait();   
    
    OnlineResponse response = task.Result;
    Result result = response.Results[0];
    LogManager.Flush();

    // 先存储第一页返回的结果
    List<dynamic> allData = JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(result.Data));

    // 循环拉取剩余分页数据
    while (result.NumRemaining > 0 && !string.IsNullOrEmpty(result.ResultId))
    {
        ReadMore more = new ReadMore()
        {
            ResultId = result.ResultId
        };
        Task<OnlineResponse> moreTask = client.Execute(more);
        moreTask.Wait();
        result = moreTask.Result.Results[0];
        allData.AddRange(JsonConvert.DeserializeObject<List<dynamic>>(JsonConvert.SerializeObject(result.Data)));
    }

    // 统一返回所有数据
    return JsonConvert.SerializeObject(allData);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 03:24:01