首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CosmosDB中获取结果,并将其放在包含指向另一个类的属性的C#类中。

从CosmosDB中获取结果,并将其放在包含指向另一个类的属性的C#类中。
EN

Stack Overflow用户
提问于 2021-12-16 19:55:00
回答 1查看 89关注 0票数 4

在我的CosmosDB上,我有一个json文档:

代码语言:javascript
运行
复制
--- Category example on Container Categories
{
    "id": "expert_talks",
    "name": "Expert Talks",
 }

--- Timeline example on Container Timeline
    "id": "30122021170000",
    "type": "PDF",
    "datePublished": "2021-12-29T16:00:00.944Z",
    "title": "The Title2",
    "subTitle": "The Subtitle2",
    "category": "expert_talks",
    "tags": [
        "Alpha",
        "Bravo",
        "Charlie",
        "Delta",
        "Echo",
        "Fox"
    ],
    "file": "https://africau.edu/images/default/sample.pdf"
}

因此,时间线条目指向类别容器上存在的键。

这是我的模式..。有两个模型和一个调用CosmosDb给我带来的结果,然后我应该提供一个时间线条目的列表。

代码语言:javascript
运行
复制
// My models
    public class TimelineItem
    {
        public string Id { get; set; }
        public string Type { get; set; }
        public string Title { get; set; }
        public string SubTitle { get; set; }
        public string File { get; set; }
        public Category Category { get; set; }
        public DateTime DatePublished { get; set; }
        public List<People>? People { get; set; }
        public List<string> Tags { get; set; }
    }
public class Category
    {
        public string Id { get; set; }
        public string Name { get; set; }
    }

// The code that's make the call
public async Task<List<TimelineItem>> GetTimeline()
        {
            string sqlQueryText = $"SELECT * FROM c order by c.id";
            QueryDefinition queryDefinition = new QueryDefinition(sqlQueryText);
            FeedIterator<TimelineItem> queryResultSetIterator = this.timelineContainer.GetItemQueryIterator<TimelineItem>(queryDefinition);
            List<TimelineItem> items = new List<TimelineItem>();
            while (queryResultSetIterator.HasMoreResults)
            {
                FeedResponse<TimelineItem> currentResultSet = await queryResultSetIterator.ReadNextAsync();
                foreach (TimelineItem item in currentResultSet)
                {
                    items.Add(item);
                }
            }
            return items;
        }

问题就在这一行:FeedResponse currentResultSet = await currentResultSet

因为从json数据库得到的结果是一个字符串,而不是一个对象。因此,我没有这个错误:错误地将值"expert_talks“转换为输入‘以色列制药公司模型。路径“.”,第1行,位置155。

这个错误对我来说是有意义的,但对于如何解决这个问题,我没有老生常谈。有没有什么方法可以对Cosmos进行SQL调用,并将结果以指定的模式形式给我,比如对此执行一些关系SQL查询?

如果没有:是否有机会将这些类别作为参数发送,如公共异步任务GetTimeline( allOfMyCategories),以及在某些情况下如何使用函数中的数据?

如何解决这个简单的问题?提前谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-12-16 22:09:55

存储此数据的方式与要将数据查询和反序列化为对象的方式不正确。如果您想将一个对象嵌入到另一个对象的内部,它需要以下面的格式存储,这样您就可以将它反序列化到这两个对象中,如上面所示。

代码语言:javascript
运行
复制
{    
"id": "30122021170000",
"type": "PDF",
"datePublished": "2021-12-29T16:00:00.944Z",
"title": "The Title2",
"subTitle": "The Subtitle2",
"category": {
    "id": "expert_talks",
    "name": "Expert Talks"
},
"tags": [
    "Alpha",
    "Bravo",
    "Charlie",
    "Delta",
    "Echo",
    "Fox"
],
"file": "https://africau.edu/images/default/sample.pdf"
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70384881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档