Cosmos DB linq не загружает списки - PullRequest
0 голосов
/ 22 апреля 2020

Мне нужно найти информацию в моей базе данных космоса, учитывая список имен аккаунтов

Я не хочу делать это как отдельные запросы в Космос, поэтому я подумал, что могу использовать linq

var lowerCaseAccountNames = accounts.Select(x => x.AccountName.ToLower()).ToList();
IQueryable<Account> queryable = _cosmosConnection.Container.GetItemLinqQueryable<Account>();
queryable = queryable.Where(x => lowerCaseAccountNames.Contains((x.AccountName.ToLower())));
var iterator = queryable.ToFeedIterator();
var accountsInDatabase = new List<Account>();

while (iterator.HasMoreResults)
{
  var currentResultSet = await iterator.ReadNextAsync();
  accountsInDatabase.AddRange(currentResultSet);
}

Пример учетной записи в Cosmos приведен ниже

{
    "MyId": "35024",
    "accountName": "Account to be found",
    "companies": [
        {
            "companyId": "6f8c235e-69b7-42f9-9917-79411754fef0",
            "companyName": "A company"
        }
    ],
}

Лог c выше правильно находит мою учетную запись

Однако, заполнены только свойства самой учетной записи - .e. MyId и AccountName

Мне нужно также заполнить компании

Как мне обеспечить это?

Я вижу, что сгенерированный linq SQL ниже

Я не уверен, как добраться до этого в коде?

SELECT VALUE root 
FROM root 
WHERE (LOWER(root["accountName"]) IN ("this does not exist", "account to be found"))

Кажется, есть разница между способом, которым итератор запроса и значения карты итератора LINQ

Как вы можете см. в json, компании строчные. В моем настоящем классе это начинается с прописных букв

[JsonProperty("companies")]
public List<AccountCompany> Companies { get; set; }

Это не вызывает каких-либо проблем для QueryIterator?

Может кто-нибудь помочь, пожалуйста?

Приветствия

Пол

...