Запрос Cosmos DB Linq всегда возвращает 0 результатов - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть простой документ со следующей структурой:

Id:guid id
FamilyName:"some name"
Children:[
{
  name:"somename",
  age:agevalue

}]

Мой запрос на основе запроса sql возвращает одну строку данных:

SqlQuerySpec query = new SqlQuerySpec(@"SELECT f  FROM Families f
                                           JOIN c IN f.Children
                                           WHERE c.name='somename'");               

var test = client.CreateDocumentQuery<FamilyModel>(docColUri, query, option).ToList();

, но когда я пытаюсь используйте linq, я всегда получаю нулевой результат. Я использую следующее для linq:

 var x = client.CreateDocumentQuery<FamilyModel>(docColUri, option)
                                      .SelectMany(f=>
                                          f.Children.Where(c=> c.name == "somename"))
                                           .ToList();

Может кто-нибудь, пожалуйста, помогите мне и дайте мне знать, что я делаю неправильно?

1 Ответ

1 голос
/ 14 апреля 2020

Запустив тот же запрос, что и вы, мне удалось вернуть результат. Вот документ, с которым я работаю:

"id": "1",
"FamilyName": "Smith",
"Children": [
    {
        "name": "John",
        "age": 21
    }
],
"_rid": "Gj0yANGrYVIDAAAAAAAAAA==",
"_self": "dbs/Gj0yAA==/colls/Gj0yANGrYVI=/docs/Gj0yANGrYVIDAAAAAAAAAA==/",
"_etag": "\"e6015c65-0000-0800-0000-5e94d6380000\"",
"_attachments": "attachments/",
"_ts": 1586812472

Я настроил класс для FamilyModel следующим образом:

public class FamilyModel
{
    public string id { get; set; }
    public string FamilyName { get; set; }
    public Children[] Children { get; set; }
}

public class Children
{
    public string name { get; set; }
    public int age { get; set; }
}

И чтобы выполнить запрос, я получил следующий код (Simple. NET Консольное приложение).

static void Main(string[] args)
    {
        Uri collectionLink = UriFactory.CreateDocumentCollectionUri(databaseName, collectionName);

        var option = new FeedOptions()
        {
            EnableCrossPartitionQuery = true
        };

        using (client = new DocumentClient(new Uri(endpoint), primaryKey))
        {

            var x = client.CreateDocumentQuery<FamilyModel>(collectionLink, option)
                .SelectMany(f => f.Children.Where(c => c.name == "John"))
                .ToList();

            foreach (var result in x)
            {
                Console.WriteLine(result.name);
                Console.WriteLine(result.age);
            }
        }
    }

И я получаю следующий результат, возвращенный мне в консоли:

enter image description here

Включили ли вы кросс-разделение запросов в ваших вариантах? Я предполагаю, что вашим ключом раздела является / id, поэтому если это не так, дайте мне знать, и я могу попытаться воссоздать вашу проблему.

Если я что-то упустил здесь, вы настроили по-другому, Я знаю, чтобы я мог воссоздать ваш сценарий.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...