CosmosDb ВЫБРАТЬ несколько значений с помощью запроса LINQ - PullRequest
0 голосов
/ 13 января 2020

Что будет LINQ-эквивалентом этого космоса SQL Запрос API:

SELECT c as Person, ST_DISTANCE(c.location, {'type': 'Point', 'coordinates':[-122.3382419, 47.6074856]}) as Distance
FROM c 
WHERE  c.DocType = 0 AND 
ST_DISTANCE(c.location, {'type': 'Point', 'coordinates':[-123.3382419, 47.6074856]}) < 1 AND NOT c.Blocked

, который возвращается

[
    {
        "Person": {
            "DocType": 0,
            "location": {
                "type": "Point",
                "coordinates": [
                    -123.3382419,
                    47.6074856
                ]
            },
            "MDS": "Chwal",
            "Description": "Bduwhs",
            "Contents": null,
            "GFree": false,
            "Veg": false,
            "AllergicContents": null,
            "Calorie": 0,
            "LinkToRecipe": null,
            "Cost": 36,
            "DASD": "Mexican",
            "ExpirationTime": "2019-12-17T11:30:52Z",
            "Images": [
                "test/25254932-2898-5fd7-949b-b2feb25a4964"
            ],
            "ProducerUserId": "1b36c0f1-425c-483a-bb01-69b06e69f203",
            "ExchangeDateTimeStartInUtc": "2019-12-17T20:30:52Z",
            "ExchangeDateTimeEndInUtc": "2019-12-17T19:30:52Z",
            "Blocked": false,
            "id": "asd,
            "_rid": "asd=="

        },
        "Distance": 0.1
    }
]

Проблема с ST_DISTANCE состоит в том, что он может быть рассчитан только на Cosmos db, и не может быть оценена постом.

1 Ответ

0 голосов
/ 18 марта 2020

Нашел способ сделать это, кроме написания SQL строки запроса

DocumentDBRepository.RunQueryAsync(
from c in DocumentDBRepository.DocumentQuery<Person>()
where c.DocType == 0
&& c.Location.Distance(point) < 1
&& !c.Blocked
select new { Person = c, Distance = c.Location.Distance(point) });

Также понял, что LINQ лямбда отличается от запроса LINQ. Выше приведен запрос LINQ, лямбда LINQ выглядит как this

...