在单个查询中从CosmosDb获取多种类型的实体

时间:2018-07-15 08:12:13

标签: c# azure-cosmosdb azure-cosmosdb-sqlapi

我正在尝试使用sql API从CosmosDb中的集合中获取所有类型的实体。但是我只得到public class ActivityBase: { // common properties for all activities... } public class Running: ActivityBase { // specific properties to Running... } public class Dancing: ActivityBase { // specific properties to Dancing... } 实体,而不是特定的类实体。

这是我的模特:

 var query = Client.CreateDocumentQuery<ActivityBase>(collection.SelfLink, feedOptions)
                .Where(/*some filter which does not exclude entities by ActivityType*/) 
                .AsDocumentQuery();

这是当前查询:

List<ActivityBase>

我最终得到的是一个List<ActivityBase>

我需要一个Running,它包含诸如Dancingtable之类的特定实体,而不仅仅是基类对象。是否可以在查询本身中指定此方法?

1 个答案:

答案 0 :(得分:0)

T中的CreateDocumentQuery类型只是告诉SDK在哪里映射检索到的对象,而不是要查询的对象。那部分进入过滤器。

如果您的过滤器没有将查询范围缩小到RunningDancing类型,那么此查询将要做的就是检索任何类型的对象,然后将其映射到ActivityBase 。这意味着即使您正在查询正确的类型,您也将永远不会看到它们,因为映射器将忽略它们。

您可以通过将T类型更改为dynamicDocument并检查内容来快速检查。