我正在使用Azure CosmosDB(SQL API),并且正在尝试使用Microsoft.Azure.Cosmos.Spatial执行一些地理空间查询。
例如,我想拿第五个最接近的项目。所以我尝试了:
var query = Collection.GetItemLinqQueryable<T>();
var items = query.OrderBy(i => i.Location.Distance(myCenterPoint)).Take(5);
但是我得到以下异常: Microsoft.Azure.Cosmos.Query.Core.Exceptions.ExpectedQueryPartitionProviderException:{“错误”:[{“严重性”:“错误”,“消息”:“不支持的ORDER BY子句。ORDERBY项目表达式无法映射到文档路径。“}]}
所以我尝试了类似的东西:
var items = query.Where(i => i.Location.Distance(myCenterPoint) < 5000).ToList();
var newItems = items.OrderBy(i => i.Location.Distance(myCenterPoint)).ToList();
但是我收到另一个异常,告诉我Distance方法只能在CosmosDb中执行。
我看到的唯一选择是创建自己的Distance方法,然后就可以订购我的收藏了。但是我有5000m的限制。如果5000m内只有3个项目,我将需要执行另一个查询并增加了限制。但是我觉得这还没有优化。
您有什么建议吗?