我使用带有LINQ的.net核心1.0.1中的C#中的Azure Documents SDK来抽象一个以lambdas为参数的简单Fetch方法。除了我添加一个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错误还是我错过了一些明显的东西?
谢谢!
答案 0 :(得分:1)
每当我看到这样的奇怪行为时,通常是因为你有一个哈希索引(默认值)而不是该字段上的范围索引。检查集合的索引策略。