@@ -61,7 +61,9 @@ public override AsyncPageable<EntityMetadata> GetAllEntitiesAsync(EntityQuery? f
6161
6262 /// <inheritdoc/>
6363 public override AsyncPageable < EntityMetadata < T > > GetAllEntitiesAsync < T > ( EntityQuery ? filter = null )
64- => this . GetAllEntitiesAsync ( this . Convert < T > , filter ) ;
64+ => this . SupportsAsyncSerialization
65+ ? this . GetAllEntitiesAsync ( this . Convert < T > , filter )
66+ : this . GetAllEntitiesAsync ( this . ConvertSync < T > , filter ) ;
6567
6668 /// <inheritdoc/>
6769 public override async Task < EntityMetadata ? > GetEntityAsync (
@@ -139,6 +141,39 @@ AsyncPageable<TMetadata> GetAllEntitiesAsync<TMetadata>(
139141 } ) ;
140142 }
141143
144+ AsyncPageable < TMetadata > GetAllEntitiesAsync < TMetadata > (
145+ Func < EntityBackendQueries . EntityMetadata , Task < TMetadata > > selectAsync ,
146+ EntityQuery ? filter )
147+ where TMetadata : notnull
148+ {
149+ bool includeState = filter ? . IncludeState ?? true ;
150+ bool includeTransient = filter ? . IncludeTransient ?? false ;
151+ string startsWith = filter ? . InstanceIdStartsWith ?? string . Empty ;
152+ DateTime ? lastModifiedFrom = filter ? . LastModifiedFrom ? . UtcDateTime ;
153+ DateTime ? lastModifiedTo = filter ? . LastModifiedTo ? . UtcDateTime ;
154+
155+ return Pageable . Create ( async ( continuation , size , cancellation ) =>
156+ {
157+ continuation ??= filter ? . ContinuationToken ;
158+ size ??= filter ? . PageSize ;
159+ EntityBackendQueries . EntityQueryResult result = await this . Queries . QueryEntitiesAsync (
160+ new EntityBackendQueries . EntityQuery ( )
161+ {
162+ InstanceIdStartsWith = startsWith ,
163+ LastModifiedFrom = lastModifiedFrom ,
164+ LastModifiedTo = lastModifiedTo ,
165+ IncludeTransient = includeTransient ,
166+ IncludeState = includeState ,
167+ ContinuationToken = continuation ,
168+ PageSize = size ,
169+ } ,
170+ cancellation ) ;
171+
172+ TMetadata [ ] items = await Task . WhenAll ( result . Results . Select ( selectAsync ) ) ;
173+ return new Page < TMetadata > ( items , result . ContinuationToken ) ;
174+ } ) ;
175+ }
176+
142177 async Task < EntityMetadata < T > > Convert < T > ( EntityBackendQueries . EntityMetadata metadata )
143178 {
144179 T ? state = this . SupportsAsyncSerialization
@@ -155,6 +190,20 @@ async Task<EntityMetadata<T>> Convert<T>(EntityBackendQueries.EntityMetadata met
155190 } ;
156191 }
157192
193+ EntityMetadata < T > ConvertSync < T > ( EntityBackendQueries . EntityMetadata metadata )
194+ {
195+ T ? state = this . Converter . Deserialize < T > ( metadata . SerializedState ) ;
196+
197+ return new (
198+ metadata . EntityId . ConvertFromCore ( ) ,
199+ state )
200+ {
201+ LastModifiedTime = metadata . LastModifiedTime ,
202+ BacklogQueueSize = metadata . BacklogQueueSize ,
203+ LockedBy = metadata . LockedBy ,
204+ } ;
205+ }
206+
158207 async Task < EntityMetadata < T > ? > Convert < T > ( EntityBackendQueries . EntityMetadata ? metadata )
159208 {
160209 if ( metadata is null )
0 commit comments