首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >查询Azure表中的复杂类型

查询Azure表中的复杂类型
EN

Stack Overflow用户
提问于 2018-05-03 23:23:04
回答 1查看 578关注 0票数 0

我是NoSql概念的新手。出于"ModelFirst“的心态,我通常会先设计我的模型。我有一个如下的模型。

代码语言:javascript
复制
public class Book
{
    public string Name { get; set; }
    [EntityPropertyConverter(typeof(Category))]
    public List<Category> Categories { get; set; }
}
public class Category
{
    public string Name { get; set; }
}

学生类是一个复杂的类型,

代码语言:javascript
复制
[EntityPropertyConverter]

属性有助于在写入Azure Table之前序列化类别,并在读回时反序列化。

一本书可以属于多个类别。我的问题是,如果有人必须通过n个类别中的一个来搜索一本书,我们如何才能做到这一点。

Azure Table支持如下查询

代码语言:javascript
复制
TableQuery.GenerateFilterCondition("Categories", QueryComparisons.Equal, JsonConvert.SerializeObject(???))

但是这样我就不能得到所需的结果。

如果我的总体方法不正确,请发表评论。

EN

回答 1

Stack Overflow用户

发布于 2018-05-31 17:25:07

有一种方法可以将复杂的对象写入和查询到表存储中,这是SDK中的TableEntity.Flatten方法,它首先将对象扁平化。TableEntity.ConvertBack方法将其读回并转换为原始复杂对象。它不执行完全序列化,它将本机属性保留为扁平化对象上的EntityProperty,以便可以单独查询每个属性。

也就是说,当前版本的TableEntity.Flatten api不支持IEnumerable/ICollection类型的属性。但是,nuget package Object Flattener 2.0版支持集合/可枚举/索引类型属性:

https://www.nuget.org/packages/ObjectFlattenerRecomposer/

因此,如果您的对象具有这些类型的索引/可枚举类型属性,则可以使用此nuget将复杂类型写入表存储。这个nuget包做的事情与SDK中的api相同(它是TableEntity.Flatten / ConvertBack方法背后的原始代码),但除此之外,它会在写入表存储之前将可枚举/集合类型的属性转换为json字符串,并且在透明地从表读取时创建原始复杂对象,您无需担心将扁平对象反序列化为原始复杂类型。

回到您最初的问题,可以通过我在SDK中提到的方法或ObjectFlattenerRecomposer api的最新nuget包将复杂对象写入和读取到表存储中。但是,如果您想从列表类型属性中查询单个对象,这仍然很棘手,因为我提到的列表将是表上的json字符串格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50158670

复制
相关文章

相似问题

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