Skip to content

Commit 1d5dc72

Browse files
FIND-13264: Filter by enumerated properties
- Add selecting IEnumerable<TField> property then select props in TField - Add unit tests for methods
1 parent 370a12e commit 1d5dc72

File tree

11 files changed

+397
-118
lines changed

11 files changed

+397
-118
lines changed

APIs/src/EpiServer.ContentGraph/Api/Filters/AndFilter.cs

+65
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ public AndFilter(Expression<Func<T, int>> fieldSelector, NumericFilterOperators
3737
And(fieldSelector, filterOperators);
3838
}
3939
#endregion
40+
#region Base type
4041
public AndFilter<T> And(Expression<Func<T, string>> fieldSelector, IFilterOperator filterOperator)
4142
{
4243
fieldSelector.ValidateNotNullArgument("fieldSelector");
@@ -61,6 +62,12 @@ public AndFilter<T> And(Expression<Func<T, double?>> fieldSelector, IFilterOpera
6162
And(fieldSelector.GetFieldPath(), filterOperator);
6263
return this;
6364
}
65+
public AndFilter<T> And(Expression<Func<T, float?>> fieldSelector, IFilterOperator filterOperator)
66+
{
67+
fieldSelector.ValidateNotNullArgument("fieldSelector");
68+
And(fieldSelector.GetFieldPath(), filterOperator);
69+
return this;
70+
}
6471
public AndFilter<T> And(Expression<Func<T, int>> fieldSelector, IFilterOperator filterOperator)
6572
{
6673
fieldSelector.ValidateNotNullArgument("fieldSelector");
@@ -73,6 +80,64 @@ public AndFilter<T> And(Expression<Func<T, bool>> fieldSelector, IFilterOperator
7380
And(fieldSelector.GetFieldPath(), filterOperator);
7481
return this;
7582
}
83+
#endregion
84+
#region Enumerable
85+
public AndFilter<T> And(Expression<Func<T, IEnumerable<string>>> fieldSelector, IFilterOperator filterOperator)
86+
{
87+
fieldSelector.ValidateNotNullArgument("fieldSelector");
88+
And(fieldSelector.GetFieldPath(), filterOperator);
89+
return this;
90+
}
91+
public AndFilter(Expression<Func<T, IEnumerable<string>>> fieldSelector, StringFilterOperators filterOperators)
92+
{
93+
And(fieldSelector, filterOperators);
94+
}
95+
public AndFilter<T> And(Expression<Func<T, IEnumerable<bool>>> fieldSelector, IFilterOperator filterOperator)
96+
{
97+
fieldSelector.ValidateNotNullArgument("fieldSelector");
98+
And(fieldSelector.GetFieldPath(), filterOperator);
99+
return this;
100+
}
101+
public AndFilter<T> And(Expression<Func<T, IEnumerable<int>>> fieldSelector, IFilterOperator filterOperator)
102+
{
103+
fieldSelector.ValidateNotNullArgument("fieldSelector");
104+
And(fieldSelector.GetFieldPath(), filterOperator);
105+
return this;
106+
}
107+
public AndFilter<T> And(Expression<Func<T, IEnumerable<double>>> fieldSelector, IFilterOperator filterOperator)
108+
{
109+
fieldSelector.ValidateNotNullArgument("fieldSelector");
110+
And(fieldSelector.GetFieldPath(), filterOperator);
111+
return this;
112+
}
113+
public AndFilter<T> And(Expression<Func<T, IEnumerable<long>>> fieldSelector, IFilterOperator filterOperator)
114+
{
115+
fieldSelector.ValidateNotNullArgument("fieldSelector");
116+
And(fieldSelector.GetFieldPath(), filterOperator);
117+
return this;
118+
}
119+
public AndFilter<T> And(Expression<Func<T, IEnumerable<float>>> fieldSelector, IFilterOperator filterOperator)
120+
{
121+
fieldSelector.ValidateNotNullArgument("fieldSelector");
122+
And(fieldSelector.GetFieldPath(), filterOperator);
123+
return this;
124+
}
125+
public AndFilter<T> And(Expression<Func<T, IEnumerable<DateTime>>> fieldSelector, IFilterOperator filterOperator)
126+
{
127+
fieldSelector.ValidateNotNullArgument("fieldSelector");
128+
And(fieldSelector.GetFieldPath(), filterOperator);
129+
return this;
130+
}
131+
public AndFilter<T> And<TField>(Expression<Func<T, IEnumerable<TField>>> rootSelector,
132+
Expression<Func<TField, object>> fieldSelector,
133+
IFilterOperator filterOperator)
134+
{
135+
rootSelector.ValidateNotNullArgument("rootSelector");
136+
fieldSelector.ValidateNotNullArgument("fieldSelector");
137+
And($"{rootSelector.GetFieldPath()}.{fieldSelector.GetFieldPath()}", filterOperator);
138+
return this;
139+
}
140+
#endregion
76141
private AndFilter<T> And(Expression<Func<T, Filter>> fieldSelector)
77142
{
78143
fieldSelector.ValidateNotNullArgument("fieldSelector");

APIs/src/EpiServer.ContentGraph/Api/Filters/NotFilter.cs

+63
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public NotFilter<T> Not(Expression<Func<T, double?>> fieldSelector, IFilterOpera
5454
Not(fieldSelector.GetFieldPath(), filterOperator);
5555
return this;
5656
}
57+
public NotFilter<T> Not(Expression<Func<T, float?>> fieldSelector, IFilterOperator filterOperator)
58+
{
59+
fieldSelector.ValidateNotNullArgument("fieldSelector");
60+
Not(fieldSelector.GetFieldPath(), filterOperator);
61+
return this;
62+
}
5763
public NotFilter<T> Not(Expression<Func<T, DateTime?>> fieldSelector, IFilterOperator filterOperator)
5864
{
5965
fieldSelector.ValidateNotNullArgument("fieldSelector");
@@ -85,6 +91,63 @@ public NotFilter<T> Not(params Expression<Func<T, Filter>>[] fieldSelectors)
8591
}
8692
return this;
8793
}
94+
#region Enumerable
95+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<string>>> fieldSelector, IFilterOperator filterOperator)
96+
{
97+
fieldSelector.ValidateNotNullArgument("fieldSelector");
98+
Not(fieldSelector.GetFieldPath(), filterOperator);
99+
return this;
100+
}
101+
public NotFilter(Expression<Func<T, IEnumerable<string>>> fieldSelector, StringFilterOperators filterOperators)
102+
{
103+
Not(fieldSelector, filterOperators);
104+
}
105+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<bool>>> fieldSelector, IFilterOperator filterOperator)
106+
{
107+
fieldSelector.ValidateNotNullArgument("fieldSelector");
108+
Not(fieldSelector.GetFieldPath(), filterOperator);
109+
return this;
110+
}
111+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<int>>> fieldSelector, IFilterOperator filterOperator)
112+
{
113+
fieldSelector.ValidateNotNullArgument("fieldSelector");
114+
Not(fieldSelector.GetFieldPath(), filterOperator);
115+
return this;
116+
}
117+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<double>>> fieldSelector, IFilterOperator filterOperator)
118+
{
119+
fieldSelector.ValidateNotNullArgument("fieldSelector");
120+
Not(fieldSelector.GetFieldPath(), filterOperator);
121+
return this;
122+
}
123+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<long>>> fieldSelector, IFilterOperator filterOperator)
124+
{
125+
fieldSelector.ValidateNotNullArgument("fieldSelector");
126+
Not(fieldSelector.GetFieldPath(), filterOperator);
127+
return this;
128+
}
129+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<float>>> fieldSelector, IFilterOperator filterOperator)
130+
{
131+
fieldSelector.ValidateNotNullArgument("fieldSelector");
132+
Not(fieldSelector.GetFieldPath(), filterOperator);
133+
return this;
134+
}
135+
public NotFilter<T> Not(Expression<Func<T, IEnumerable<DateTime>>> fieldSelector, IFilterOperator filterOperator)
136+
{
137+
fieldSelector.ValidateNotNullArgument("fieldSelector");
138+
Not(fieldSelector.GetFieldPath(), filterOperator);
139+
return this;
140+
}
141+
public NotFilter<T> Not<TField>(Expression<Func<T, IEnumerable<TField>>> rootSelector,
142+
Expression<Func<TField, object>> fieldSelector,
143+
IFilterOperator filterOperator)
144+
{
145+
rootSelector.ValidateNotNullArgument("rootSelector");
146+
fieldSelector.ValidateNotNullArgument("fieldSelector");
147+
Not($"{rootSelector.GetFieldPath()}.{fieldSelector.GetFieldPath()}", filterOperator);
148+
return this;
149+
}
150+
#endregion
88151
}
89152

90153
public class NotFilter : Filter

APIs/src/EpiServer.ContentGraph/Api/Filters/NumericFilterOperators.cs

-24
Original file line numberDiff line numberDiff line change
@@ -71,14 +71,6 @@ public NumericFilterOperators InRange(int? from, int? to)
7171
}
7272
return this;
7373
}
74-
public NumericFilterOperators InRanges(params (int? from, int? to)[] ranges)
75-
{
76-
foreach (var range in ranges)
77-
{
78-
InRange(range.from, range.to);
79-
}
80-
return this;
81-
}
8274

8375
public NumericFilterOperators Eq(float value)
8476
{
@@ -164,21 +156,5 @@ public NumericFilterOperators InRange(double? from, double? to)
164156
}
165157
return this;
166158
}
167-
public NumericFilterOperators InRanges(params (float? from, float? to)[] ranges)
168-
{
169-
foreach (var range in ranges)
170-
{
171-
InRange(range.from, range.to);
172-
}
173-
return this;
174-
}
175-
public NumericFilterOperators InRanges(params (double? from, double? to)[] ranges)
176-
{
177-
foreach (var range in ranges)
178-
{
179-
InRange(range.from, range.to);
180-
}
181-
return this;
182-
}
183159
}
184160
}

APIs/src/EpiServer.ContentGraph/Api/Filters/OrFilter.cs

+63
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,12 @@ public OrFilter<T> Or(Expression<Func<T, long?>> fieldSelector, IFilterOperator
5454
Or(fieldSelector.GetFieldPath(), filterOperator);
5555
return this;
5656
}
57+
public OrFilter<T> Not(Expression<Func<T, float?>> fieldSelector, IFilterOperator filterOperator)
58+
{
59+
fieldSelector.ValidateNotNullArgument("fieldSelector");
60+
Or(fieldSelector.GetFieldPath(), filterOperator);
61+
return this;
62+
}
5763
public OrFilter<T> Or(Expression<Func<T, double?>> fieldSelector, IFilterOperator filterOperator)
5864
{
5965
fieldSelector.ValidateNotNullArgument("fieldSelector");
@@ -92,6 +98,63 @@ public OrFilter<T> Or(params Expression<Func<T, Filter>>[] fieldSelectors)
9298
}
9399
return this;
94100
}
101+
#region Enumerable
102+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<string>>> fieldSelector, IFilterOperator filterOperator)
103+
{
104+
fieldSelector.ValidateNotNullArgument("fieldSelector");
105+
Or(fieldSelector.GetFieldPath(), filterOperator);
106+
return this;
107+
}
108+
public OrFilter(Expression<Func<T, IEnumerable<string>>> fieldSelector, StringFilterOperators filterOperators)
109+
{
110+
Or(fieldSelector, filterOperators);
111+
}
112+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<bool>>> fieldSelector, IFilterOperator filterOperator)
113+
{
114+
fieldSelector.ValidateNotNullArgument("fieldSelector");
115+
Or(fieldSelector.GetFieldPath(), filterOperator);
116+
return this;
117+
}
118+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<int>>> fieldSelector, IFilterOperator filterOperator)
119+
{
120+
fieldSelector.ValidateNotNullArgument("fieldSelector");
121+
Or(fieldSelector.GetFieldPath(), filterOperator);
122+
return this;
123+
}
124+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<double>>> fieldSelector, IFilterOperator filterOperator)
125+
{
126+
fieldSelector.ValidateNotNullArgument("fieldSelector");
127+
Or(fieldSelector.GetFieldPath(), filterOperator);
128+
return this;
129+
}
130+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<long>>> fieldSelector, IFilterOperator filterOperator)
131+
{
132+
fieldSelector.ValidateNotNullArgument("fieldSelector");
133+
Or(fieldSelector.GetFieldPath(), filterOperator);
134+
return this;
135+
}
136+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<float>>> fieldSelector, IFilterOperator filterOperator)
137+
{
138+
fieldSelector.ValidateNotNullArgument("fieldSelector");
139+
Or(fieldSelector.GetFieldPath(), filterOperator);
140+
return this;
141+
}
142+
public OrFilter<T> Or(Expression<Func<T, IEnumerable<DateTime>>> fieldSelector, IFilterOperator filterOperator)
143+
{
144+
fieldSelector.ValidateNotNullArgument("fieldSelector");
145+
Or(fieldSelector.GetFieldPath(), filterOperator);
146+
return this;
147+
}
148+
public OrFilter<T> Or<TField>(Expression<Func<T, IEnumerable<TField>>> rootSelector,
149+
Expression<Func<TField, object>> fieldSelector,
150+
IFilterOperator filterOperator)
151+
{
152+
rootSelector.ValidateNotNullArgument("rootSelector");
153+
fieldSelector.ValidateNotNullArgument("fieldSelector");
154+
Or($"{rootSelector.GetFieldPath()}.{fieldSelector.GetFieldPath()}", filterOperator);
155+
return this;
156+
}
157+
#endregion
95158
}
96159

97160
public class OrFilter : Filter

0 commit comments

Comments
 (0)