У меня рабочая ширина 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: {"errors": [{"severity": "Error" , "message": "Неподдерживаемое предложение ORDER BY. Выражение элемента ORDER BY не могло быть сопоставлено с путем к документу."}]}
Итак, я попробовал что-то вроде:
var items = query.Where(i => i.Location.Distance(myCenterPoint) < 5000).ToList();
var newItems = items.OrderBy(i => i.Location.Distance(myCenterPoint)).ToList();
Но Я получаю другое исключение, сообщающее мне, что метод Distance может выполняться только в CosmosDb.
Единственный вариант, который я вижу, - это создать свой собственный метод Distance, после чего я смогу заказать свою коллекцию. Но у меня предел в 5000 метров. Если в пределах 5000 м есть только 3 элемента, мне нужно будет выполнить другой запрос с увеличенным лимитом. Но у меня такое чувство, что это не оптимизировано.
Есть ли у вас какие-нибудь предложения?