【发布时间】:2020-09-14 14:48:11
【问题描述】:
当 Azure CosmosDB 的 SQL ToString 系统函数用于使用 Microsoft.Azure.Documents.Client.DocumentClient 客户端从 Cosmos 容器中获取数据时出现错误。
奇怪,但查询在 Azure 门户的“数据资源管理器”选项卡上运行良好。
https://docs.microsoft.com/en-us/azure/cosmos-db/sql-query-tostring
Assembly Microsoft.Azure.DocumentDB.Core, Version=1.9.1.0
Project .Net Core 2.2
查询
select ToString(c) FROM c where c.id = 1
select value ToString(c) FROM c where c.id = 1
错误
Microsoft.Azure.Documents.BadRequestException: 'Message: {"errors":[{"severity":"Error","location":{"start":13,"end":21},"code":"SC2005","message":"'ToString' is not a recognized built-in function name."}]}'
更新 1
代码如下
public async Task<IEnumerable<T>> GetItemsAsync<T>(string sqlExpression, string collectionName)
{
var option = new FeedOptions { EnableCrossPartitionQuery = true, MaxItemCount = 100 };
IDocumentQuery<T> query = this.client.CreateDocumentQuery<T>(
UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), sqlExpression, option)
.AsDocumentQuery();
List<T> results = new List<T>();
while (query.HasMoreResults)
{
var items = await query.ExecuteNextAsync<T>();
results.AddRange(items);
}
return results;
}
string sqlExpression = $"SELECT ToString(C) FROM C WHERE C.id = {id}";
var jsons = await this.GetItemsAsync<string>(sqlExpression, collectionName);
更新 2
实际 JSON
[
{
"id": "79332",
"pk": "2020081416PM",
"key": "134869d8-f291-4c96-affe-266d86ae95b8",
"version": 3,
"_self": "dbs/ddadfZp5AA==/colls/fZp5AJhvYZY=/docs/fZp5AJhvYZZ6AAAAAAAAAQ==/",
"_etag": "\"1f00dsd475d-0000-0200-0000-5f5f6edc0000\"",
"_ts": 1600089820
}
]
预期结果
[
"{\"id\":\"79332\",\"pk\":\"2020081416PM\",\"key\":\"134869d8-f291-4c96-affe-266d86ae95b8\",\"version\":3,\"_self\":\"dbs\\/fZp5AA==\\/colls\\/fZp5AJhvYZY=\\/docs\\/fZp5AJhvYZZ6AAAAAAAAAQ==\\/\",\"_etag\":\"\\\"1f00475d-0000-0200-0000-5f5f6edc0000\\\"\",\"_ts\":1600089820}"
]
【问题讨论】:
-
感谢所有抽出宝贵时间对我的问题作出反应的用户,但我不确定您为什么投了反对票。如果您也能提供否决票的原因,我将不胜感激。
-
请展示 .NET 代码以了解您想要实现的目标?如果你只想要一个字符串版本的值,那么在 C# 中对结果调用 `.ToString()' 会更简单。
-
@Noah 我已经添加了代码,我只想将存储的完整 JSON 转换为字符串,同时从数据库中获取它。
-
请同时显示来自 Cosmos 的示例源项目以及获取后所需的结果项目。
-
如错误消息所述,ToString() 不是 Cosmos DB 中的系统函数。您不能在查询中使用它。你想在这里做什么?
标签: c# sql .net-core azure-cosmosdb