4
4
using System . Linq ;
5
5
using System . Linq . Expressions ;
6
6
using System . Reflection ;
7
+ using System . Text ;
7
8
using System . Threading ;
8
9
using System . Threading . Tasks ;
9
10
using Redis . OM . Common ;
@@ -191,6 +192,14 @@ public async Task UpdateAsync(T item)
191
192
SaveToStateManager ( key , item ) ;
192
193
}
193
194
195
+ /// <inheritdoc />
196
+ public async ValueTask UpdateAsync ( IEnumerable < T > items )
197
+ {
198
+ var tasks = items . Select ( UpdateAsync ) ;
199
+
200
+ await Task . WhenAll ( tasks ) ;
201
+ }
202
+
194
203
/// <inheritdoc />
195
204
public void Delete ( T item )
196
205
{
@@ -199,6 +208,23 @@ public void Delete(T item)
199
208
StateManager . Remove ( key ) ;
200
209
}
201
210
211
+ /// <inheritdoc />
212
+ public void Delete ( IEnumerable < T > items )
213
+ {
214
+ var keys = items . Select ( x => x . GetKey ( ) ) . ToArray ( ) ;
215
+ if ( ! keys . Any ( ) )
216
+ {
217
+ return ;
218
+ }
219
+
220
+ foreach ( var key in keys )
221
+ {
222
+ StateManager . Remove ( key ) ;
223
+ }
224
+
225
+ _connection . Unlink ( keys ) ;
226
+ }
227
+
202
228
/// <inheritdoc />
203
229
public async Task DeleteAsync ( T item )
204
230
{
@@ -207,6 +233,23 @@ public async Task DeleteAsync(T item)
207
233
StateManager . Remove ( key ) ;
208
234
}
209
235
236
+ /// <inheritdoc />
237
+ public async Task DeleteAsync ( IEnumerable < T > items )
238
+ {
239
+ var keys = items . Select ( x => x . GetKey ( ) ) . ToArray ( ) ;
240
+ if ( ! keys . Any ( ) )
241
+ {
242
+ return ;
243
+ }
244
+
245
+ foreach ( var key in keys )
246
+ {
247
+ StateManager . Remove ( key ) ;
248
+ }
249
+
250
+ await _connection . UnlinkAsync ( keys ) ;
251
+ }
252
+
210
253
/// <inheritdoc />
211
254
public async Task < IList < T > > ToListAsync ( )
212
255
{
@@ -604,6 +647,44 @@ public async Task<string> InsertAsync(T item, TimeSpan timeSpan)
604
647
return ( ( RedisQueryProvider ) Provider ) . Connection . Set ( item , when , timeSpan ) ;
605
648
}
606
649
650
+ /// <inheritdoc/>
651
+ public async Task < List < string > > Insert ( IEnumerable < T > items )
652
+ {
653
+ var distinct = items . Distinct ( ) . ToArray ( ) ;
654
+ if ( ! distinct . Any ( ) )
655
+ {
656
+ return new List < string > ( ) ;
657
+ }
658
+
659
+ var tasks = new List < Task < string > > ( ) ;
660
+ foreach ( var item in distinct )
661
+ {
662
+ tasks . Add ( ( ( RedisQueryProvider ) Provider ) . Connection . SetAsync ( item ) ) ;
663
+ }
664
+
665
+ var result = await Task . WhenAll ( tasks ) ;
666
+ return result . ToList ( ) ;
667
+ }
668
+
669
+ /// <inheritdoc/>
670
+ public async Task < List < string > > Insert ( IEnumerable < T > items , TimeSpan timeSpan )
671
+ {
672
+ var distinct = items . Distinct ( ) . ToArray ( ) ;
673
+ if ( ! distinct . Any ( ) )
674
+ {
675
+ return new List < string > ( ) ;
676
+ }
677
+
678
+ var tasks = new List < Task < string > > ( ) ;
679
+ foreach ( var item in distinct )
680
+ {
681
+ tasks . Add ( ( ( RedisQueryProvider ) Provider ) . Connection . SetAsync ( item , timeSpan ) ) ;
682
+ }
683
+
684
+ var result = await Task . WhenAll ( tasks ) ;
685
+ return result . ToList ( ) ;
686
+ }
687
+
607
688
/// <inheritdoc/>
608
689
public T ? FindById ( string id )
609
690
{
@@ -640,34 +721,6 @@ public IAsyncEnumerator<T> GetAsyncEnumerator(CancellationToken cancellationToke
640
721
return new RedisCollectionEnumerator < T > ( Expression , provider . Connection , ChunkSize , StateManager , BooleanExpression , SaveState ) ;
641
722
}
642
723
643
- /// <inheritdoc/>
644
- public async Task < List < string > > Insert ( IEnumerable < T > items )
645
- {
646
- var tasks = new List < Task < string > > ( ) ;
647
- foreach ( var item in items . Distinct ( ) )
648
- {
649
- tasks . Add ( ( ( RedisQueryProvider ) Provider ) . Connection . SetAsync ( item ) ) ;
650
- }
651
-
652
- await Task . WhenAll ( tasks ) ;
653
- var result = tasks . Select ( x => x . Result ) . ToList ( ) ;
654
- return result ;
655
- }
656
-
657
- /// <inheritdoc/>
658
- public async Task < List < string > > Insert ( IEnumerable < T > items , TimeSpan timeSpan )
659
- {
660
- var tasks = new List < Task < string > > ( ) ;
661
- foreach ( var item in items . Distinct ( ) )
662
- {
663
- tasks . Add ( ( ( RedisQueryProvider ) Provider ) . Connection . SetAsync ( item , timeSpan ) ) ;
664
- }
665
-
666
- await Task . WhenAll ( tasks ) ;
667
- var result = tasks . Select ( x => x . Result ) . ToList ( ) ;
668
- return result ;
669
- }
670
-
671
724
private static MethodInfo GetMethodInfo < T1 , T2 > ( Func < T1 , T2 > f , T1 unused )
672
725
{
673
726
return f . Method ;
0 commit comments