向 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 错误还是我遗漏了一些明显的东西?
谢谢!
每当我看到这样的奇怪行为时,通常是因为您在该字段上有一个散列索引(默认)而不是范围索引。检查集合的索引策略。
我在 .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 错误还是我遗漏了一些明显的东西?
谢谢!
每当我看到这样的奇怪行为时,通常是因为您在该字段上有一个散列索引(默认)而不是范围索引。检查集合的索引策略。