![](/img/trans.png)
[英]In entity framework 6 SelectMany to Join option for query throwing error The source IQueryable doesn't implement IDbAsyncEnumerable<MyModel>
[英]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.