繁体   English   中英

SelectMany 不适用于 cosmosDb 的子属性?

[英]SelectMany doesn't work on cosmosDb for child properties?

当我尝试在针对 cosmosdb 构建的可查询对象上使用 selectMany 时,我总是遇到异常:

LINQ 表达式 'DbSet .Where(t => t.Id == __timelineId_0) .SelectMany( source: t => EF.Property>(t, "GraduationEvents") .AsQueryable(), collectionSelector: (t, c) = > new TransparentIdentifier( Outer = t, Inner = c ))' 无法翻译。 以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。 有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038

查询无关紧要,总是在我使用 selectMany 时出现此错误。

示例查询:

 await _dbContext.Timelines.Where(x => x.Id == timelineId).Select(x => x.GraduationEvents).SelectMany(x => x).ToListAsync();

我的实体配置:

        public void Configure(EntityTypeBuilder<Timeline> builder)
    {
        builder.HasKey(x => x.Id);
        builder.HasAlternateKey(x => x.Id);
        builder.OwnsMany(x => x.GraduationEvents, x => x.OwnsMany(graduationEvent => graduationEvent.Subjects));
    }

我还尝试使用本机 cosmosClient,但是当我使用普通 sql 查询基础时,我得到了空对象(全部为空)。 任何想法我做错了什么?

Sajid - 我尝试了你的解决方案,但例外情况保持不变

尝试通过 List 属性 (GraduationEvents) 直接调用 .SelectMany()。

我通常然后调用 AsDocumentQuery() 生成对 CosmosDB 的查询,然后执行该查询以检索结果。

一些伪 c# 来澄清这一点:

var query = this.documentClient.CreateDocumentQuery(uri, options)
    .SelectMany(x => x.GraduationEvents).AsDocumentQuery();

List<T> results = new List<T>();
while (query.HasMoreResults)
{
    results.AddRange(await query.ExecuteNextAsync());
}

编辑:此方法使用本机 Azure DocumentClient 库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM