简体   繁体   中英

SelectMany doesn't work on cosmosDb for child properties?

When I try to use selectMany on queryable that I build against cosmosdb I always get exception:

The LINQ expression 'DbSet .Where(t => t.Id == __timelineId_0) .SelectMany( source: t => EF.Property>(t, "GraduationEvents") .AsQueryable(), collectionSelector: (t, c) => new TransparentIdentifier( Outer = t, Inner = c ))' could not be translated. Either rewrite the query in a form that can be translated, or switch to client evaluation explicitly by inserting a call to either AsEnumerable(), AsAsyncEnumerable(), ToList(), or ToListAsync(). See https://go.microsoft.com/fwlink/?linkid=2101038 for more information.

The query doesn't matter, always when I use selectMany I get this error.

Example query:

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

My entity configuration:

        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));
    }

I also tried to use native cosmosClient but when I query the base with plain sql I get empty objects (all nulls). Any thoughts what am I doing wrong?

Sajid - I tried your soulution but the exception remains the same

Try calling directly .SelectMany() over the List property (GraduationEvents).

I usually then call AsDocumentQuery() to generate the query to CosmosDB and then execute that query to retrieve the results.

Some pseudo c# to clarify this a bit:

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());
}

Edit: This approach uses the native Azure DocumentClient library.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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