diff --git a/src/Ardalis.Specification.EntityFramework6/Extensions/DbSetExtensions.cs b/src/Ardalis.Specification.EntityFramework6/Extensions/DbSetExtensions.cs index 72dc4154..7df90bbf 100644 --- a/src/Ardalis.Specification.EntityFramework6/Extensions/DbSetExtensions.cs +++ b/src/Ardalis.Specification.EntityFramework6/Extensions/DbSetExtensions.cs @@ -12,9 +12,9 @@ public static async Task> ToListAsync( { var result = await SpecificationEvaluator.Default.GetQuery(source, specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? result - : specification.PostProcessingAction(result).ToList(); + : specification.PostProcessingAction(result).AsList(); } public static async Task> ToEnumerableAsync( @@ -25,7 +25,7 @@ public static async Task> ToEnumerableAsync( { var result = await SpecificationEvaluator.Default.GetQuery(source, specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? result : specification.PostProcessingAction(result); } diff --git a/src/Ardalis.Specification.EntityFramework6/RepositoryBaseOfT.cs b/src/Ardalis.Specification.EntityFramework6/RepositoryBaseOfT.cs index c6c46829..2744922f 100644 --- a/src/Ardalis.Specification.EntityFramework6/RepositoryBaseOfT.cs +++ b/src/Ardalis.Specification.EntityFramework6/RepositoryBaseOfT.cs @@ -136,7 +136,9 @@ public virtual async Task> ListAsync(ISpecification specification, Ca { var queryResult = await ApplySpecification(specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null ? queryResult : specification.PostProcessingAction(queryResult).ToList(); + return specification.PostProcessingAction is null + ? queryResult + : specification.PostProcessingAction(queryResult).AsList(); } /// @@ -144,7 +146,9 @@ public virtual async Task> ListAsync(ISpecification diff --git a/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs b/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs index e50be38b..f2ef5128 100644 --- a/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs +++ b/src/Ardalis.Specification.EntityFrameworkCore/ContextFactoryRepositoryBaseOfT.cs @@ -68,7 +68,9 @@ public async Task> ListAsync(ISpecification specification await using var dbContext = _dbContextFactory.CreateDbContext(); var queryResult = await ApplySpecification(specification, dbContext).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null ? queryResult : specification.PostProcessingAction(queryResult).ToList(); + return specification.PostProcessingAction is null + ? queryResult + : specification.PostProcessingAction(queryResult).AsList(); } /// @@ -77,7 +79,9 @@ public async Task> ListAsync(ISpecification diff --git a/src/Ardalis.Specification.EntityFrameworkCore/Extensions/DbSetExtensions.cs b/src/Ardalis.Specification.EntityFrameworkCore/Extensions/DbSetExtensions.cs index 1ec3fba7..638215c4 100644 --- a/src/Ardalis.Specification.EntityFrameworkCore/Extensions/DbSetExtensions.cs +++ b/src/Ardalis.Specification.EntityFrameworkCore/Extensions/DbSetExtensions.cs @@ -10,9 +10,9 @@ public static async Task> ToListAsync( { var result = await SpecificationEvaluator.Default.GetQuery(source, specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? result - : specification.PostProcessingAction(result).ToList(); + : specification.PostProcessingAction(result).AsList(); } public static async Task> ToEnumerableAsync( @@ -23,7 +23,7 @@ public static async Task> ToEnumerableAsync( { var result = await SpecificationEvaluator.Default.GetQuery(source, specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? result : specification.PostProcessingAction(result); } diff --git a/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs b/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs index 9dde0544..eaf259bb 100644 --- a/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs +++ b/src/Ardalis.Specification.EntityFrameworkCore/RepositoryBaseOfT.cs @@ -131,7 +131,9 @@ public virtual async Task> ListAsync(ISpecification specification, Ca { var queryResult = await ApplySpecification(specification).ToListAsync(cancellationToken); - return specification.PostProcessingAction == null ? queryResult : specification.PostProcessingAction(queryResult).ToList(); + return specification.PostProcessingAction is null + ? queryResult + : specification.PostProcessingAction(queryResult).AsList(); } /// @@ -139,7 +141,9 @@ public virtual async Task> ListAsync(ISpecification diff --git a/src/Ardalis.Specification/CollectionExtensions.cs b/src/Ardalis.Specification/CollectionExtensions.cs new file mode 100644 index 00000000..1280a8c4 --- /dev/null +++ b/src/Ardalis.Specification/CollectionExtensions.cs @@ -0,0 +1,14 @@ +namespace Ardalis.Specification; + +internal static class CollectionExtensions +{ + public static List AsList(this IEnumerable source) + { + if (source is List list) + { + return list; + } + + return source.ToList(); + } +} diff --git a/src/Ardalis.Specification/Evaluators/InMemorySpecificationEvaluator.cs b/src/Ardalis.Specification/Evaluators/InMemorySpecificationEvaluator.cs index 1443cbd6..c69c17c6 100644 --- a/src/Ardalis.Specification/Evaluators/InMemorySpecificationEvaluator.cs +++ b/src/Ardalis.Specification/Evaluators/InMemorySpecificationEvaluator.cs @@ -34,7 +34,7 @@ public virtual IEnumerable Evaluate(IEnumerable source, ? baseQuery.Select(specification.Selector.Compile()) : baseQuery.SelectMany(specification.SelectorMany!.Compile()); - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? resultQuery : specification.PostProcessingAction(resultQuery); } @@ -46,7 +46,7 @@ public virtual IEnumerable Evaluate(IEnumerable source, ISpecification< source = evaluator.Evaluate(source, specification); } - return specification.PostProcessingAction == null + return specification.PostProcessingAction is null ? source : specification.PostProcessingAction(source); }