diff --git a/PoweredSoft.DynamicQuery.Cli/PoweredSoft.DynamicQuery.Cli.csproj b/PoweredSoft.DynamicQuery.Cli/PoweredSoft.DynamicQuery.Cli.csproj
index 9aff51a..3ec5c61 100644
--- a/PoweredSoft.DynamicQuery.Cli/PoweredSoft.DynamicQuery.Cli.csproj
+++ b/PoweredSoft.DynamicQuery.Cli/PoweredSoft.DynamicQuery.Cli.csproj
@@ -5,6 +5,10 @@
netcoreapp2.1
+
+
+
+
diff --git a/PoweredSoft.DynamicQuery.Cli/Program.cs b/PoweredSoft.DynamicQuery.Cli/Program.cs
index a3dc86d..6b91df8 100644
--- a/PoweredSoft.DynamicQuery.Cli/Program.cs
+++ b/PoweredSoft.DynamicQuery.Cli/Program.cs
@@ -2,6 +2,8 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Converters;
namespace PoweredSoft.DynamicQuery.Cli
{
@@ -73,26 +75,42 @@ namespace PoweredSoft.DynamicQuery.Cli
};
var queryable = list.AsQueryable();
-
var criteria = new QueryCriteria();
+ criteria.Page = 1;
+ criteria.PageSize = 10;
- criteria.Filters.Add(new SimpleFilter
+ criteria.Filters = new List
{
- Path = "LastName",
- Value = "Lebee",
- Type = FilterType.Equal,
- });
-
- criteria.Filters.Add(new SimpleFilter
- {
- Path = "FirstName",
- Value = "David,Michaela",
- Type = FilterType.Equal,
- });
+ new SimpleFilter() {Path = nameof(Person.LastName), Value = "Lebee", Type = FilterType.Equal},
+ new CompositeFilter()
+ {
+ Type = FilterType.Composite,
+ And = true,
+ Filters = new List
+ {
+ new SimpleFilter() {Path = nameof(Person.FirstName), Value = "David", Type = FilterType.Equal},
+ new SimpleFilter() {Path = nameof(Person.FirstName), Value = "Zohra", Type = FilterType.Equal},
+ }
+ }
+ };
var handler = new QueryHandler();
handler.AddInterceptor(new PersonQueryInterceptor());
- handler.Execute(queryable, criteria);
+ var result = handler.Execute(queryable, criteria);
+
+ var jsonSettings = new JsonSerializerSettings()
+ {
+ ReferenceLoopHandling = ReferenceLoopHandling.Ignore
+ };
+
+ jsonSettings.Converters.Add(new StringEnumConverter { AllowIntegerValues = false });
+
+ Console.WriteLine("Request:\n");
+ Console.WriteLine(JsonConvert.SerializeObject(criteria, Formatting.Indented, jsonSettings));
+ Console.WriteLine("");
+ Console.WriteLine("Response:\n");
+ Console.WriteLine(JsonConvert.SerializeObject(result, Formatting.Indented, jsonSettings));
+ Console.ReadKey();
}
}
}
diff --git a/PoweredSoft.DynamicQuery.Core/IBeforeQueryAlteredInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IBeforeQueryAlteredInterceptor.cs
deleted file mode 100644
index 7fadcc5..0000000
--- a/PoweredSoft.DynamicQuery.Core/IBeforeQueryAlteredInterceptor.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Linq;
-
-namespace PoweredSoft.DynamicQuery.Core
-{
- public interface IBeforeQueryAlteredInterceptor : IQueryInterceptor
- {
- IQueryable InterceptQueryBeforeAltered(IQueryCriteria criteria, IQueryable queryable);
- }
-
- public interface IBeforeQueryAlteredInterceptor : IQueryInterceptor
- {
- IQueryable InterceptQueryBeforeAltered(IQueryCriteria criteria, IQueryable queryable);
- }
-}
diff --git a/PoweredSoft.DynamicQuery.Core/IBeforeQueryExecuteInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IBeforeQueryExecuteInterceptor.cs
deleted file mode 100644
index 6896da6..0000000
--- a/PoweredSoft.DynamicQuery.Core/IBeforeQueryExecuteInterceptor.cs
+++ /dev/null
@@ -1,14 +0,0 @@
-using System.Linq;
-
-namespace PoweredSoft.DynamicQuery.Core
-{
- public interface IBeforeQueryExecuteInterceptor : IQueryInterceptor
- {
- IQueryable InterceptBeforeQuery(IQueryCriteria criteria, IQueryable queryable);
- }
-
- public interface IBeforeQueryExecuteInterceptor : IQueryInterceptor
- {
- IQueryable InterceptBeforeQuery(IQueryCriteria criteria, IQueryable queryable);
- }
-}
diff --git a/PoweredSoft.DynamicQuery.Core/IBeforeQueryFilterInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IBeforeQueryFilterInterceptor.cs
new file mode 100644
index 0000000..a3d0d80
--- /dev/null
+++ b/PoweredSoft.DynamicQuery.Core/IBeforeQueryFilterInterceptor.cs
@@ -0,0 +1,14 @@
+using System.Linq;
+
+namespace PoweredSoft.DynamicQuery.Core
+{
+ public interface IBeforeQueryFilterInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptBeforeFiltering(IQueryCriteria criteria, IQueryable queryable);
+ }
+
+ public interface IBeforeQueryFilterInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptBeforeFiltering(IQueryCriteria criteria, IQueryable queryable);
+ }
+}
diff --git a/PoweredSoft.DynamicQuery.Core/IIncludeStrategyInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IIncludeStrategyInterceptor.cs
new file mode 100644
index 0000000..0e0a240
--- /dev/null
+++ b/PoweredSoft.DynamicQuery.Core/IIncludeStrategyInterceptor.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace PoweredSoft.DynamicQuery.Core
+{
+ public interface IIncludeStrategyInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptIncludeStrategy(IQueryCriteria criteria, IQueryable queryable);
+ }
+
+ public interface IIncludeStrategyInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptIncludeStrategy(IQueryCriteria criteria, IQueryable queryable);
+ }
+}
diff --git a/PoweredSoft.DynamicQuery.Core/INoSortInterceptor.cs b/PoweredSoft.DynamicQuery.Core/INoSortInterceptor.cs
new file mode 100644
index 0000000..6b79dda
--- /dev/null
+++ b/PoweredSoft.DynamicQuery.Core/INoSortInterceptor.cs
@@ -0,0 +1,14 @@
+using System.Linq;
+
+namespace PoweredSoft.DynamicQuery.Core
+{
+ public interface INoSortInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptNoSort(IQueryable queryable);
+ }
+
+ public interface INoSortInterceptor : IQueryInterceptor
+ {
+ IQueryable InterceptNoSort(IQueryable queryable);
+ }
+}
diff --git a/PoweredSoft.DynamicQuery.Core/IQueryHandler.cs b/PoweredSoft.DynamicQuery.Core/IQueryHandler.cs
index 335a56a..ca6738a 100644
--- a/PoweredSoft.DynamicQuery.Core/IQueryHandler.cs
+++ b/PoweredSoft.DynamicQuery.Core/IQueryHandler.cs
@@ -5,10 +5,18 @@ using System.Threading.Tasks;
namespace PoweredSoft.DynamicQuery.Core
{
- public interface IQueryHandler
+ public interface IInterceptableQueryHandler
{
- IQueryResult Execute(IQueryable queryable, IQueryCriteria criteria);
- Task ExecuteAsync(IQueryable queryable, IQueryCriteria criteria);
void AddInterceptor(IQueryInterceptor interceptor);
}
+
+ public interface IQueryHandler : IInterceptableQueryHandler
+ {
+ IQueryExecutionResult Execute(IQueryable queryable, IQueryCriteria criteria);
+ }
+
+ public interface IAsyncQueryHandler : IInterceptableQueryHandler
+ {
+ Task ExecuteAsync(IQueryable queryable, IQueryCriteria criteria);
+ }
}
diff --git a/PoweredSoft.DynamicQuery.Core/IQueryInterceptor.cs b/PoweredSoft.DynamicQuery.Core/IQueryInterceptor.cs
index 4c4db2f..a806bee 100644
--- a/PoweredSoft.DynamicQuery.Core/IQueryInterceptor.cs
+++ b/PoweredSoft.DynamicQuery.Core/IQueryInterceptor.cs
@@ -1,7 +1,11 @@
-namespace PoweredSoft.DynamicQuery.Core
+using System.Linq;
+
+namespace PoweredSoft.DynamicQuery.Core
{
public interface IQueryInterceptor
{
}
+
+
}
diff --git a/PoweredSoft.DynamicQuery.Core/IQueryResult.cs b/PoweredSoft.DynamicQuery.Core/IQueryResult.cs
index 5fda81f..d42fceb 100644
--- a/PoweredSoft.DynamicQuery.Core/IQueryResult.cs
+++ b/PoweredSoft.DynamicQuery.Core/IQueryResult.cs
@@ -13,17 +13,21 @@ namespace PoweredSoft.DynamicQuery.Core
public interface IQueryResult
{
- long Count { get; }
List Aggregates { get; }
- }
-
- public interface IQueryResultSimple : IQueryResult
- {
List