-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathActionExpression.cs
More file actions
120 lines (90 loc) · 3.34 KB
/
ActionExpression.cs
File metadata and controls
120 lines (90 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
using System.ComponentModel;
using System.Linq.Expressions;
using QueryMakerLibrary.Constants;
using QueryMakerLibrary.Extensions;
using QueryMakerLibrary.Logic;
using static QueryMakerLibrary.Components.Filter;
namespace QueryMakerLibrary
{
internal sealed class ActionExpression
{
#region PRIVATE MEMBERS
private FilterActions _action;
private Expression? _memberExpression;
private ConstantExpression? _valueExpression;
private Type? _actualMemberType;
#endregion PRIVATE MEMBERS
#region INTERNAL MEMBERS
internal FilterActions Action
{
get => _action;
set
{
_action = value;
IsContentAction = Action is FilterActions.Contains or FilterActions.NotContains
or FilterActions.StartsWith or FilterActions.NotStartsWith
or FilterActions.EndsWith or FilterActions.NotEndsWith;
IsGreaterOrLessThanAction = Action is FilterActions.GreaterThan
or FilterActions.LessThan or FilterActions.GreaterThanOrEqual
or FilterActions.LessThanOrEqual;
}
}
internal bool Negate { get; set; } = false;
internal bool IgnoreCase { get; set; } = false;
internal Expression MemberExpression
{
get => _memberExpression ?? throw new Exception(NotNullalbleMember(nameof(MemberExpression)));
set
{
_memberExpression = value ?? throw new Exception(NotNullalbleMember(nameof(MemberExpression)));
IsMemberEnumerable = MemberExpression.Type.IsEnumerableType();
ActualMemberType = IsMemberEnumerable
? MemberExpression.Type.GetGenericArguments()[0]
: MemberExpression.Type.GetActualType();
IsMemberString = ActualMemberType == typeof(string);
}
}
internal ConstantExpression ValueExpression
{
get => _valueExpression ?? throw new Exception(NotNullalbleMember(nameof(ValueExpression)));
set
{
_valueExpression = value ?? throw new Exception(NotNullalbleMember(nameof(ValueExpression)));
IsValueEnumerable = ValueExpression.Type.IsEnumerableType();
}
}
#region READONLY MEMBERS
internal bool IsMemberEnumerable { get; private set; }
internal bool IsMemberString { get; private set; }
internal bool IsValueEnumerable { get; private set; }
[Category("Read Only")]
[Description("If Member's Expression is an Enumerable, then return type of Enumerable")]
internal Type ActualMemberType
{
get => _actualMemberType ?? throw new Exception(NotNullalbleMember(nameof(ActualMemberType)));
set => _actualMemberType = value;
}
internal bool IsContentAction { get; private set; }
internal bool IsGreaterOrLessThanAction { get; private set; }
#endregion READONLY MEMBERS
#endregion INTERNAL MEMBERS
#region CONSTRUCTOR
internal ActionExpression(string? field, FilterActions action, bool negate, bool ignoreCase,
Expression memberExpression, object? value)
{
Action = action;
Negate = negate;
IgnoreCase = ignoreCase;
MemberExpression = memberExpression;
ValueExpression = CreateExpression.ConstantExpression(ActualMemberType,
field, value, IsContentAction);
}
#endregion CONSTRUCTOR
#region METHODS
private static string NotNullalbleMember(string member)
{
return string.Format(Errors.NotNullableMember, member, nameof(ActionExpression));
}
#endregion METHODS
}
}