向 DocumentDB LINQ 查询添加 OrderBy 子句会破坏它 (C#)

Addition of OrderBy clause to a DocumentDB LINQ query breaks it (C#)

我在 .net core 1.0.1 中使用 C# 中的 Azure Documents SDK 和 LINQ 来抽象一个简单的 Fetch 方法,该方法将 lambda 作为参数。除了添加 ORDER BY 子句外,它工作正常——尽管我不知道为什么。方法如下:

public async Task<IEnumerable<T>> Fetch<R>(Expression<Func<T, bool>> predicate, Expression<Func<T, R>> orderby, int count)
{
    var results = new List<T>();
    var collectionLink = UriFactory.CreateDocumentCollectionUri(_config.Database, _collectionId);

    // This works
    //var document = _client.CreateDocumentQuery<T>(collectionLink).Where(predicate).Take(count).AsDocumentQuery();

    // This ** DOESN'T ** work
    var document = _client.CreateDocumentQuery<T>(collectionLink).Where(predicate).OrderBy(orderby).Take(count).AsDocumentQuery();

    var feedResponse = await document.ExecuteNextAsync<T>();
    results.AddRange(feedResponse.AsEnumerable<T>());
    return results;
}

添加 .OrderBy() 方法后,我返回了 0 个结果。删除后,我得到了预期的 10(尽管是按插入顺序)。在查看 .AsDocumentQuery() 方法生成的 SQL 时,我看不出有什么明显的错误,所以我有点不知所措。 为了完整起见,这里有一个使用示例...

var result = data.Fetch(f => f.Firstname.Contains("i"), x => x.Firstname, 10);

...及其生成的查询:

SELECT TOP 10 * FROM root WHERE CONTAINS(root["Firstname"], "i") ORDER BY root["Firstname"] ASC

这是一个 SDK 错误还是我遗漏了一些明显的东西?

谢谢!

每当我看到这样的奇怪行为时,通常是因为您在该字段上有一个散列索引(默认)而不是范围索引。检查集合的索引策略。