diff --git a/apiSpec/Microsoft_AspNetCore_Routing_AbpEndpointRouterOptions.md b/apiSpec/Microsoft_AspNetCore_Routing_AbpEndpointRouterOptions.md index 7747d776e2..f410fd77e3 100644 --- a/apiSpec/Microsoft_AspNetCore_Routing_AbpEndpointRouterOptions.md +++ b/apiSpec/Microsoft_AspNetCore_Routing_AbpEndpointRouterOptions.md @@ -1,7 +1,5 @@ ---- uid: Microsoft.AspNetCore.Routing.AbpEndpointRouterOptions summary: '*Summary test' ---- *Information Test* diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageSearchBox/Default.cshtml b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageSearchBox/Default.cshtml index a45223e825..d7a2e893d4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageSearchBox/Default.cshtml +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/Pages/Shared/Components/AbpPageSearchBox/Default.cshtml @@ -6,7 +6,7 @@
- +
diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs index f9ef8c86e0..68ff261588 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/EntityFrameworkCore/EfCoreAsyncQueryableProvider.cs @@ -1,5 +1,7 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; @@ -16,19 +18,332 @@ namespace Volo.Abp.EntityFrameworkCore return queryable.Provider is EntityQueryProvider; } + public Task ContainsAsync(IQueryable queryable, T item, CancellationToken cancellationToken = default) + { + return queryable.ContainsAsync(item, cancellationToken); + } + + public Task AnyAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.AnyAsync(predicate, cancellationToken); + } + + public Task AllAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.AllAsync(predicate, cancellationToken); + } + public Task CountAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.CountAsync(cancellationToken); } - public Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task CountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { - return queryable.ToListAsync(cancellationToken); + return queryable.CountAsync(predicate, cancellationToken); + } + + public Task LongCountAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.LongCountAsync(cancellationToken); + } + + public Task LongCountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.LongCountAsync(predicate, cancellationToken); + } + + public Task FirstAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.FirstAsync(cancellationToken); + } + + public Task FirstAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.FirstAsync(predicate, cancellationToken); } public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { return queryable.FirstOrDefaultAsync(cancellationToken); } + + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return queryable.FirstOrDefaultAsync(predicate, cancellationToken); + } + + public Task LastAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.LastAsync(cancellationToken); + } + + public Task LastAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.LastAsync(predicate, cancellationToken); + } + + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.LastOrDefaultAsync(cancellationToken); + } + + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return queryable.LastOrDefaultAsync(predicate, cancellationToken); + } + + public Task SingleAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SingleAsync(cancellationToken); + } + + public Task SingleAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return queryable.SingleAsync(predicate, cancellationToken); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SingleOrDefaultAsync(cancellationToken); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return queryable.SingleOrDefaultAsync(predicate, cancellationToken); + } + + public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.MinAsync(cancellationToken); + } + + public Task MinAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.MinAsync(selector, cancellationToken); + } + + public Task MaxAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.MaxAsync(cancellationToken); + } + + public Task MaxAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.MaxAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.SumAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return queryable.AverageAsync(selector, cancellationToken); + } + + public Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.ToListAsync(cancellationToken); + } + + public Task ToArrayAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return queryable.ToArrayAsync(cancellationToken); + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreDatabaseApi.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreDatabaseApi.cs index 767bdf6e27..cffda462b0 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreDatabaseApi.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreDatabaseApi.cs @@ -18,10 +18,5 @@ namespace Volo.Abp.Uow.EntityFrameworkCore { return DbContext.SaveChangesAsync(cancellationToken); } - - public void SaveChanges() - { - DbContext.SaveChanges(); - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreTransactionApi.cs b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreTransactionApi.cs index 33f9aca1a7..99622dda96 100644 --- a/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreTransactionApi.cs +++ b/framework/src/Volo.Abp.EntityFrameworkCore/Volo/Abp/Uow/EntityFrameworkCore/EfCoreTransactionApi.cs @@ -21,7 +21,13 @@ namespace Volo.Abp.Uow.EntityFrameworkCore AttendedDbContexts = new List(); } - public void Commit() + public Task CommitAsync() + { + Commit(); + return Task.CompletedTask; + } + + protected void Commit() { DbContextTransaction.Commit(); @@ -36,12 +42,6 @@ namespace Volo.Abp.Uow.EntityFrameworkCore } } - public Task CommitAsync() - { - Commit(); - return Task.CompletedTask; - } - public void Dispose() { DbContextTransaction.Dispose(); diff --git a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs index e3fd273026..e20b60bf54 100644 --- a/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs +++ b/framework/src/Volo.Abp.Http.Client/Microsoft/Extensions/DependencyInjection/ServiceCollectionDynamicHttpClientProxyExtensions.cs @@ -45,11 +45,8 @@ namespace Microsoft.Extensions.DependencyInjection AddHttpClientFactoryAndPolicy(services, remoteServiceConfigurationName, configureHttpClientBuilder); //TODO: Make a configuration option and add remoteServiceName inside it! - //TODO: Add option to change type filter - var serviceTypes = assembly.GetTypes().Where(t => - t.IsInterface && t.IsPublic && typeof(IRemoteService).IsAssignableFrom(t) - ); + var serviceTypes = assembly.GetTypes().Where(IsSuitableForDynamicClientProxying); foreach (var serviceType in serviceTypes) { @@ -155,7 +152,7 @@ namespace Microsoft.Extensions.DependencyInjection services.AddTransient(interceptorType); var interceptorAdapterType = typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(interceptorType); - + var validationInterceptorAdapterType = typeof(AbpAsyncDeterminationInterceptor<>).MakeGenericType(typeof(ValidationInterceptor)); @@ -191,5 +188,21 @@ namespace Microsoft.Extensions.DependencyInjection return services; } + + /// + /// Checks wether the type is suitable to use with the dynamic proxying. + /// Currently the type is checked statically against some fixed conditions. + /// + /// Type to check + /// True, if the type is suitable for dynamic proxying. Otherwise false. + static bool IsSuitableForDynamicClientProxying(Type type) + { + //TODO: Add option to change type filter + + return type.IsInterface + && type.IsPublic + && !type.IsGenericType + && typeof(IRemoteService).IsAssignableFrom(type); + } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs index e98c0738fd..e2e5b7b9fe 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientModule.cs @@ -1,4 +1,6 @@ -using Microsoft.Extensions.DependencyInjection; +using System.Linq; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Http; using Volo.Abp.Castle; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; @@ -21,5 +23,24 @@ namespace Volo.Abp.Http.Client var configuration = context.Services.GetConfiguration(); Configure(configuration); } + + public override void PostConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + if (options.HttpClientActions.Any()) + { + var httpClientNames = options.HttpClientProxies.Select(x => x.Value.RemoteServiceName); + foreach (var httpClientName in httpClientNames) + { + foreach (var httpClientAction in options.HttpClientActions) + { + context.Services.Configure(httpClientName, + x => x.HttpClientActions.Add(httpClientAction.Invoke(httpClientName))); + } + } + } + }); + } } } diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs index 5adcd7525f..54cc4eb624 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/AbpHttpClientOptions.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Net.Http; using Volo.Abp.Http.Client.DynamicProxying; namespace Volo.Abp.Http.Client @@ -8,9 +9,12 @@ namespace Volo.Abp.Http.Client { public Dictionary HttpClientProxies { get; set; } + public List>> HttpClientActions { get; } + public AbpHttpClientOptions() { HttpClientProxies = new Dictionary(); + HttpClientActions = new List>>(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs index c192fc8feb..b338385861 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs @@ -25,17 +25,20 @@ namespace Volo.Abp.IdentityModel protected ICancellationTokenProvider CancellationTokenProvider { get; } protected IHttpClientFactory HttpClientFactory { get; } protected ICurrentTenant CurrentTenant { get; } + protected IdentityModelHttpRequestMessageOptions IdentityModelHttpRequestMessageOptions { get; } public IdentityModelAuthenticationService( IOptions options, ICancellationTokenProvider cancellationTokenProvider, IHttpClientFactory httpClientFactory, - ICurrentTenant currentTenant) + ICurrentTenant currentTenant, + IOptions identityModelHttpRequestMessageOptions) { ClientOptions = options.Value; CancellationTokenProvider = cancellationTokenProvider; HttpClientFactory = httpClientFactory; CurrentTenant = currentTenant; + IdentityModelHttpRequestMessageOptions = identityModelHttpRequestMessageOptions.Value; Logger = NullLogger.Instance; } @@ -74,7 +77,7 @@ namespace Volo.Abp.IdentityModel } var tokenResponse = await GetTokenResponse(discoveryResponse, configuration); - + if (tokenResponse.IsError) { if (tokenResponse.ErrorDescription != null) @@ -112,14 +115,16 @@ namespace Volo.Abp.IdentityModel { using (var httpClient = HttpClientFactory.CreateClient(HttpClientName)) { - return await httpClient.GetDiscoveryDocumentAsync(new DiscoveryDocumentRequest + var request = new DiscoveryDocumentRequest { Address = configuration.Authority, Policy = { RequireHttps = configuration.RequireHttps } - }); + }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); + return await httpClient.GetDiscoveryDocumentAsync(request); } } @@ -160,6 +165,7 @@ namespace Volo.Abp.IdentityModel UserName = configuration.UserName, Password = configuration.UserPassword }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); AddParametersToRequestAsync(configuration, request); @@ -177,6 +183,7 @@ namespace Volo.Abp.IdentityModel ClientId = configuration.ClientId, ClientSecret = configuration.ClientSecret }; + IdentityModelHttpRequestMessageOptions.ConfigureHttpRequestMessage(request); AddParametersToRequestAsync(configuration, request); diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs new file mode 100644 index 0000000000..23b26faaf6 --- /dev/null +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelHttpRequestMessageOptions.cs @@ -0,0 +1,10 @@ +using System; +using System.Net.Http; + +namespace Volo.Abp.IdentityModel +{ + public class IdentityModelHttpRequestMessageOptions + { + public Action ConfigureHttpRequestMessage { get; set; } + } +} diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs index 8b0c56c812..206c4add39 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/MongoDB/MongoDbAsyncQueryableProvider.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -17,19 +18,337 @@ namespace Volo.Abp.MongoDB return queryable.Provider.GetType().Namespace?.StartsWith("MongoDB") ?? false; } + protected IMongoQueryable GetMongoQueryable(IQueryable queryable) + { + return (IMongoQueryable) queryable; + } + + public Task ContainsAsync(IQueryable queryable, T item, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).Contains(item)); + } + + public Task AnyAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AnyAsync(predicate, cancellationToken); + } + + public Task AllAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).All(predicate)); + } + public Task CountAsync(IQueryable queryable, CancellationToken cancellationToken = default) { - return ((IMongoQueryable) queryable).CountAsync(cancellationToken); + return GetMongoQueryable(queryable).CountAsync(cancellationToken); } - public Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default) + public Task CountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).CountAsync(predicate, cancellationToken); + } + + public Task LongCountAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).LongCountAsync(cancellationToken); + } + + public Task LongCountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).LongCountAsync(predicate, cancellationToken); + } + + public Task FirstAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).FirstAsync(cancellationToken); + } + + public Task FirstAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { - return ((IMongoQueryable) queryable).ToListAsync(cancellationToken); + return GetMongoQueryable(queryable).FirstAsync(predicate, cancellationToken); } public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { - return ((IMongoQueryable) queryable).FirstOrDefaultAsync(cancellationToken); + return GetMongoQueryable(queryable).FirstOrDefaultAsync(cancellationToken); + } + + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).FirstOrDefaultAsync(predicate, cancellationToken); + } + + public Task LastAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).Last()); + } + + public Task LastAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).Last(predicate)); + } + + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault()); + } + + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return Task.FromResult(GetMongoQueryable(queryable).LastOrDefault(predicate)); + } + + public Task SingleAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SingleAsync(cancellationToken); + } + + public Task SingleAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SingleAsync(predicate, cancellationToken); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SingleOrDefaultAsync(cancellationToken); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SingleOrDefaultAsync(predicate, cancellationToken); + } + + public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).MinAsync(cancellationToken); + } + + public Task MinAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).MinAsync(selector, cancellationToken); + } + + public Task MaxAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).MaxAsync(cancellationToken); + } + + public Task MaxAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).MaxAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).SumAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).AverageAsync(selector, cancellationToken); + } + + public Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return GetMongoQueryable(queryable).ToListAsync(cancellationToken); + } + + public async Task ToArrayAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + return (await GetMongoQueryable(queryable).ToListAsync(cancellationToken)).ToArray(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs index 3548f81ad1..f5b3cf3a6d 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/AsyncQueryableExecuter.cs @@ -1,5 +1,7 @@ +using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; using Volo.Abp.DependencyInjection; @@ -15,9 +17,36 @@ namespace Volo.Abp.Linq Providers = providers; } - public virtual Task CountAsync( - IQueryable queryable, - CancellationToken cancellationToken = default) + protected virtual IAsyncQueryableProvider FindProvider(IQueryable queryable) + { + return Providers.FirstOrDefault(p => p.CanExecute(queryable)); + } + + public Task ContainsAsync(IQueryable queryable, T item, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.ContainsAsync(queryable, item, cancellationToken) + : Task.FromResult(queryable.Contains(item)); + } + + public Task AnyAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AnyAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.Any(predicate)); + } + + public Task AllAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AllAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.All(predicate)); + } + + public Task CountAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); return provider != null @@ -25,19 +54,47 @@ namespace Volo.Abp.Linq : Task.FromResult(queryable.Count()); } - public virtual Task> ToListAsync( - IQueryable queryable, - CancellationToken cancellationToken = default) + public Task CountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); return provider != null - ? provider.ToListAsync(queryable, cancellationToken) - : Task.FromResult(queryable.ToList()); + ? provider.CountAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.Count(predicate)); } - public virtual Task FirstOrDefaultAsync( - IQueryable queryable, - CancellationToken cancellationToken = default) + public Task LongCountAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LongCountAsync(queryable, cancellationToken) + : Task.FromResult(queryable.LongCount()); + } + + public Task LongCountAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LongCountAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.LongCount(predicate)); + } + + public Task FirstAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.FirstAsync(queryable, cancellationToken) + : Task.FromResult(queryable.First()); + } + + public Task FirstAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.FirstAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.First(predicate)); + } + + public Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) { var provider = FindProvider(queryable); return provider != null @@ -45,9 +102,447 @@ namespace Volo.Abp.Linq : Task.FromResult(queryable.FirstOrDefault()); } - protected virtual IAsyncQueryableProvider FindProvider(IQueryable queryable) + public Task FirstOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) { - return Providers.FirstOrDefault(p => p.CanExecute(queryable)); + var provider = FindProvider(queryable); + return provider != null + ? provider.FirstOrDefaultAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.FirstOrDefault(predicate)); + } + + public Task LastAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LastAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Last()); + } + + public Task LastAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LastAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.Last(predicate)); + } + + public Task LastOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LastOrDefaultAsync(queryable, cancellationToken) + : Task.FromResult(queryable.LastOrDefault()); + } + + public Task LastOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.LastOrDefaultAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.LastOrDefault(predicate)); + } + + public Task SingleAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SingleAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Single()); + } + + public Task SingleAsync(IQueryable queryable, Expression> predicate, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SingleAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.Single(predicate)); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SingleOrDefaultAsync(queryable, cancellationToken) + : Task.FromResult(queryable.SingleOrDefault()); + } + + public Task SingleOrDefaultAsync(IQueryable queryable, Expression> predicate, + CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SingleOrDefaultAsync(queryable, predicate, cancellationToken) + : Task.FromResult(queryable.SingleOrDefault(predicate)); + } + + public Task MinAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.MinAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Min()); + } + + public Task MinAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.MinAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Min(selector)); + } + + public Task MaxAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.MaxAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Max()); + } + + public Task MaxAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.MaxAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Max(selector)); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Sum()); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task SumAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.SumAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Sum(selector)); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, cancellationToken) + : Task.FromResult(queryable.Average()); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task AverageAsync(IQueryable queryable, Expression> selector, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.AverageAsync(queryable, selector, cancellationToken) + : Task.FromResult(queryable.Average(selector)); + } + + public Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.ToListAsync(queryable, cancellationToken) + : Task.FromResult(queryable.ToList()); + } + + public Task ToArrayAsync(IQueryable queryable, CancellationToken cancellationToken = default) + { + var provider = FindProvider(queryable); + return provider != null + ? provider.ToArrayAsync(queryable, cancellationToken) + : Task.FromResult(queryable.ToArray()); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs index 0a19318c40..7273754b77 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableExecuter.cs @@ -1,25 +1,398 @@ +using System; using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; namespace Volo.Abp.Linq { public interface IAsyncQueryableExecuter { + #region Contains + + Task ContainsAsync( + [NotNull] IQueryable queryable, + [NotNull] T item, + CancellationToken cancellationToken = default); + + #endregion + + #region Any/All + + Task AnyAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + Task AllAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Count/LongCount + Task CountAsync( - IQueryable queryable, - CancellationToken cancellationToken = default - ); + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task CountAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + + Task LongCountAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LongCountAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region First/FirstOrDefault + + Task FirstAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task FirstAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); - Task> ToListAsync( - IQueryable queryable, - CancellationToken cancellationToken = default - ); Task FirstOrDefaultAsync( - IQueryable queryable, - CancellationToken cancellationToken = default - ); + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task FirstOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Last/LastOrDefault + + Task LastAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LastAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + + Task LastOrDefaultAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LastOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Single/SingleOrDefault + + Task SingleAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task SingleAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + Task SingleOrDefaultAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + Task SingleOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Min + + Task MinAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task MinAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Max + + Task MaxAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task MaxAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Sum + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Average + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region ToList/Array + + Task> ToListAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task ToArrayAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + #endregion } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs index 43d8b6d40e..ce62ea738c 100644 --- a/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs +++ b/framework/src/Volo.Abp.Threading/Volo/Abp/Linq/IAsyncQueryableProvider.cs @@ -1,18 +1,400 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; +using System.Linq.Expressions; using System.Threading; using System.Threading.Tasks; +using JetBrains.Annotations; namespace Volo.Abp.Linq { public interface IAsyncQueryableProvider { bool CanExecute(IQueryable queryable); - - Task CountAsync(IQueryable queryable, CancellationToken cancellationToken = default); - Task> ToListAsync(IQueryable queryable, CancellationToken cancellationToken = default); + #region Contains - Task FirstOrDefaultAsync(IQueryable queryable, CancellationToken cancellationToken = default); + Task ContainsAsync( + [NotNull] IQueryable queryable, + [NotNull] T item, + CancellationToken cancellationToken = default); + + #endregion + + #region Any/All + + Task AnyAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + Task AllAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Count/LongCount + + Task CountAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task CountAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + + Task LongCountAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LongCountAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region First/FirstOrDefault + + Task FirstAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task FirstAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + + Task FirstOrDefaultAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task FirstOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Last/LastOrDefault + + Task LastAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LastAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + + Task LastOrDefaultAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task LastOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Single/SingleOrDefault + + Task SingleAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task SingleAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + Task SingleOrDefaultAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + Task SingleOrDefaultAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> predicate, + CancellationToken cancellationToken = default); + + #endregion + + #region Min + + Task MinAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task MinAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Max + + Task MaxAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task MaxAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Sum + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task SumAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region Average + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable source, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + + Task AverageAsync( + [NotNull] IQueryable queryable, + [NotNull] Expression> selector, + CancellationToken cancellationToken = default); + + #endregion + + #region ToList/Array + + Task> ToListAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + + Task ToArrayAsync( + [NotNull] IQueryable queryable, + CancellationToken cancellationToken = default); + + #endregion } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ISupportsSavingChanges.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ISupportsSavingChanges.cs index 4665f2a625..c9523bf702 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ISupportsSavingChanges.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ISupportsSavingChanges.cs @@ -5,8 +5,6 @@ namespace Volo.Abp.Uow { public interface ISupportsSavingChanges { - void SaveChanges(); - Task SaveChangesAsync(CancellationToken cancellationToken = default); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApi.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApi.cs index 6bd78cc824..01a506abe3 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApi.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/ITransactionApi.cs @@ -5,8 +5,6 @@ namespace Volo.Abp.Uow { public interface ITransactionApi : IDisposable { - void Commit(); - Task CommitAsync(); } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs index 05f49df180..b42b745fb4 100644 --- a/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs +++ b/framework/src/Volo.Abp.Uow/Volo/Abp/Uow/UnitOfWork.cs @@ -302,15 +302,7 @@ namespace Volo.Abp.Uow } } } - - protected virtual void CommitTransactions() - { - foreach (var transaction in GetAllActiveTransactionApis()) - { - transaction.Commit(); - } - } - + protected virtual async Task CommitTransactionsAsync() { foreach (var transaction in GetAllActiveTransactionApis()) diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json index 2fccd8b3bc..d92848c918 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/package.json @@ -4,8 +4,6 @@ "private": true, "dependencies": { "@abp/aspnetcore.mvc.ui.theme.basic": "^2.7.0", - "@abp/virtual-file-explorer": "^2.7.0", - "@abp/clipboard": "^2.7.0", - "@abp/prismjs": "^2.7.0" + "@abp/virtual-file-explorer": "^2.7.0" } } diff --git a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock index 6b7a5aca41..5c5cc57094 100644 --- a/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock +++ b/modules/virtual-file-explorer/app/Volo.Abp.VirtualFileExplorer.DemoApp/yarn.lock @@ -56,12 +56,12 @@ "@abp/core" "^2.7.0" bootstrap "^4.3.1" -"@abp/clipboard@^2.7.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-2.7.0.tgz#8f4b7aafae369759315481e5a331a832e61cc602" - integrity sha512-kPIASn3WPlpIUiluWPy1eIGKRZcueDGBz9K6houqyvPwspMpc0C+LtqN917svsYq4sAsaPFyGi3VfJE5lm4KZw== +"@abp/clipboard@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-2.9.0.tgz#b6d7180fbe3d8043e71b182ee620efa4877b8cf6" + integrity sha512-1rGd0PTQRWUUn2KkfOZF+2pp7rw7iSV5nUGOJ3sdTc/rLiH8tKv8FL4Sdj9EfaCiU8QVwDVmLtd5Kt6fLxeKDg== dependencies: - "@abp/core" "^2.7.0" + "@abp/core" "^2.9.0" clipboard "^2.0.4" "@abp/core@^2.7.0": @@ -71,6 +71,13 @@ dependencies: "@abp/utils" "^2.7.0" +"@abp/core@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-2.9.0.tgz#5460925a121c88f8afb69dbce65da1cd4257b024" + integrity sha512-6Hn6dPN47kqmJF0VbxNcDu370oNZPTlEGMm1dQcgM31DvOMS8ICy/4thxNYTTEr0DN9chujkw38aHFd2XqyBnw== + dependencies: + "@abp/utils" "^2.9.0" + "@abp/datatables.net-bs4@^2.7.0": version "2.7.0" resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-2.7.0.tgz#a113ca6f02b63b57e678a3b12fc06c2daa4eaff6" @@ -150,12 +157,13 @@ "@abp/core" "^2.7.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@^2.7.0": - version "2.7.0" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-2.7.0.tgz#32794af1d83b19dd49b62f41cd2414fe021be70a" - integrity sha512-RIe+Q39R0kNInkmE7TrqyCVqk+SWFQNyjHRVkqJkdj2lqfs3mIg10EwRQxDLg2KdOutEaSaK05TEEwwFSjGx8A== +"@abp/prismjs@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-2.9.0.tgz#d82ba6a5f03a09c4cc6697b3ae47955d3b4bbc20" + integrity sha512-WErltCoD6N1NTUTY9936OKzLjM/5lUJlB/utFs4gxR7yrtImW9ryUsjkRbIy42taZ+FkkB+suDDwa5g/9hujBA== dependencies: - "@abp/core" "^2.7.0" + "@abp/clipboard" "^2.9.0" + "@abp/core" "^2.9.0" prismjs "^1.17.1" "@abp/select2@^2.7.0": @@ -197,6 +205,21 @@ dependencies: just-compare "^1.3.0" +"@abp/utils@^2.9.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-2.9.0.tgz#8a66b7e1d422eae5898d32af7810d6bd625276f2" + integrity sha512-0gvWUH3jT7YE4ym2C45uKDzHs/oOdMW5lPq9ncCZ58wMxTrgPvxXNuMmRW0P259OcXYiRwmsNtb09/WlTQQbKA== + dependencies: + just-compare "^1.3.0" + +"@abp/virtual-file-explorer@^2.7.0": + version "2.9.0" + resolved "https://registry.yarnpkg.com/@abp/virtual-file-explorer/-/virtual-file-explorer-2.9.0.tgz#a55b94c8beafbb8757ca0b9794e3fa957e61221d" + integrity sha512-/CWxu3q5QF5jshLX3lw4XNWxTBBOGvZDSkuCM/pE9XNPXjIu6G3YB9XCBmqvk8toSp0d6QjShwzPcjAKPCQcpA== + dependencies: + "@abp/clipboard" "^2.9.0" + "@abp/prismjs" "^2.9.0" + "@fortawesome/fontawesome-free@^5.11.2": version "5.13.0" resolved "https://registry.yarnpkg.com/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz#fcb113d1aca4b471b709e8c9c168674fbd6e06d9"