Cosmos DB linq没有加载列表

时间:2020-04-22 15:55:30

标签: azure linq azure-cosmosdb

我需要在cosmos数据库中找到给定帐户名列表的信息

我不想作为对Cosmos的单个查询来执行此操作,所以我认为我可以使用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"
        }
    ],
}

以上逻辑可以正确找到我的帐户

但是,仅填充帐户本身的属性-.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造成任何问题吗?

0 个答案:

没有答案