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

CosmosDB LINQ查询搭配ContinuationToken时的ORDER BY异常问题

CosmosDB LINQ查询带ORDER BY时续令牌分页报错问题

使用LINQ查询CosmosDB时遇到异常:移除ORDER BY子句后分页查询正常,但添加ORDER BY后,第二次查询传入continuationToken会抛出语法错误异常。

续令牌(已截断部分内容)

[
    {
        "compositeToken": {
        "token":"+RID:~njgzAO5qBgzIGQAAAAAACA...",
            "range": {
                "min": "",
                "max": "05C1E0"
            }
        },
        "orderByItems": [
            {
                "item": 74.80897
            }
        ],
        "rid": "njgzAO5qBgzIGQAAAAAACA==",
        "skipCount": 0,
        "filter": "true"
    }
]

异常信息

Response status code does not indicate success:

BadRequest (400); Substatus: 0;

ActivityId: 5a692073-43db-4050-a856-d3d7cae01503;

Reason: ({"errors":[{"severity":"Error","location":{"start":245,"end":246},"code":"SC1001","message":"Syntax error, incorrect syntax near ','."]}

ActivityId: 5a692073-43db-4050-a856-d3d7cae01503, Microsoft.Azure.Cosmos.Tracing.TraceData.ClientSideRequestStatisticsTraceDatum, Windows/10.0.22621 cosmos-netstandard-sdk/3.31.4);

创建IQueryable的方法代码

private async Task<IQueryable<TDatabase>> _GetQuery(Expression<Func<T, bool>> predicate, Expression<Func<T, object>> orderByExpression, bool disc, TDatabase s, PagedItem pagedItem = null, Expression<Func<T, object>> orderThenByExpressionPaged = null, bool pagedDesc = false)
{
    await Task.CompletedTask;
    var queryDefinition = container.GetItemLinqQueryable<TDatabase>(continuationToken: pagedItem.ContinuationToken);//, linqSerializerOptions: LinqOptions);
    IQueryable<TDatabase> queryable = queryDefinition.Where(a => true);

    Expression<Func<TDatabase, bool>> predicateDb = mapper.Map<Expression<Func<TDatabase, bool>>>(predicate);
    Expression<Func<TDatabase, object>> orderByExpressionDB = mapper.Map<Expression<Func<TDatabase, object>>>(orderByExpression);

    if (predicateDb != null)
    {
        queryable = queryable.Where<TDatabase>(predicateDb);
    }

    IOrderedQueryable<TDatabase> OrderBy = null;

    if (orderByExpression != null)
    {
        if (disc)
            OrderBy = queryable.OrderByDescending(orderByExpressionDB);
        else
            OrderBy = queryable.OrderBy(orderByExpressionDB);

        queryable = OrderBy;
    }

    if (orderThenByExpressionPaged != null)
    {
        Expression<Func<TDatabase, object>> orderByExpressionThenByDB = mapper.Map<Expression<Func<TDatabase, object>>>(orderThenByExpressionPaged);

        if (pagedDesc)
            OrderBy = OrderBy.ThenByDescending(orderByExpressionThenByDB);
        else
            OrderBy = OrderBy.ThenBy(orderByExpressionThenByDB);

        queryable = OrderBy;
    }

    return queryable;
}

调试时移除ContinuationToken,查询可正常执行,但会返回之前的重复结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:41:30