Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
SieveModel Submodule Test
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nguyenvu
SieveModel Submodule Test
Commits
5c5e2a62
Commit
5c5e2a62
authored
4 years ago
by
thienvo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
test optimize get all by sieve
parent
9d315d87
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
87 additions
and
1 deletion
+87
-1
SieveProcessor.cs
Sieve/Services/SieveProcessor.cs
+87
-1
No files found.
Sieve/Services/SieveProcessor.cs
View file @
5c5e2a62
...
...
@@ -158,7 +158,89 @@ namespace Sieve.Services
}
}
}
//public Expression GetExpressionQuery<TEntity>(TSieveModel model,)
public
Expression
<
Func
<
TEntity
,
bool
>>
GetExpressionQuery
<
TEntity
>(
TSieveModel
model
,
bool
bCaseSensitive
=
false
)
{
if
(
model
?.
GetFiltersParsed
()
==
null
)
{
return
null
;
}
Expression
outerExpression
=
null
;
var
parameterExpression
=
Expression
.
Parameter
(
typeof
(
TEntity
),
"e"
);
foreach
(
var
filterTerm
in
model
.
GetFiltersParsed
())
{
Expression
innerExpression
=
null
;
foreach
(
var
filterTermName
in
filterTerm
.
Names
)
{
var
(
fullName
,
property
)
=
GetSieveProperty
<
TEntity
>(
false
,
true
,
filterTermName
);
if
(
property
!=
null
)
{
var
converter
=
TypeDescriptor
.
GetConverter
(
property
.
PropertyType
);
dynamic
propertyValue
=
parameterExpression
;
foreach
(
var
part
in
fullName
.
Split
(
'.'
))
{
propertyValue
=
Expression
.
PropertyOrField
(
propertyValue
,
part
);
}
if
(
filterTerm
.
Values
==
null
)
continue
;
foreach
(
var
filterTermValue
in
filterTerm
.
Values
)
{
dynamic
constantVal
=
converter
.
CanConvertFrom
(
typeof
(
string
))
?
converter
.
ConvertFrom
(
filterTermValue
)
:
Convert
.
ChangeType
(
filterTermValue
,
property
.
PropertyType
);
Expression
filterValue
=
GetClosureOverConstant
(
constantVal
,
property
.
PropertyType
);
if
(
filterTerm
.
OperatorIsCaseInsensitive
)
{
propertyValue
=
Expression
.
Call
(
propertyValue
,
typeof
(
string
).
GetMethods
()
.
First
(
m
=>
m
.
Name
==
"ToUpper"
&&
m
.
GetParameters
().
Length
==
0
));
filterValue
=
Expression
.
Call
(
filterValue
,
typeof
(
string
).
GetMethods
()
.
First
(
m
=>
m
.
Name
==
"ToUpper"
&&
m
.
GetParameters
().
Length
==
0
));
}
var
expression
=
GetExpression
(
filterTerm
,
filterValue
,
propertyValue
,
bCaseSensitive
);
if
(
filterTerm
.
OperatorIsNegated
)
{
expression
=
Expression
.
Not
(
expression
);
}
if
(
innerExpression
==
null
)
{
innerExpression
=
expression
;
}
else
{
innerExpression
=
Expression
.
Or
(
innerExpression
,
expression
);
}
}
}
}
if
(
outerExpression
==
null
)
{
outerExpression
=
innerExpression
;
continue
;
}
if
(
innerExpression
==
null
)
{
continue
;
}
outerExpression
=
Expression
.
And
(
outerExpression
,
innerExpression
);
}
return
Expression
.
Lambda
<
Func
<
TEntity
,
bool
>>(
outerExpression
,
parameterExpression
);
}
private
IQueryable
<
TEntity
>
ApplyFiltering
<
TEntity
>(
TSieveModel
model
,
IQueryable
<
TEntity
>
result
,
...
...
@@ -337,7 +419,11 @@ namespace Sieve.Services
var
page
=
model
?.
Page
??
1
;
var
pageSize
=
model
?.
PageSize
??
_options
.
Value
.
DefaultPageSize
;
var
maxPageSize
=
_options
.
Value
.
MaxPageSize
>
0
?
_options
.
Value
.
MaxPageSize
:
pageSize
;
if
(
ResultCountBeForeApplyPagination
==
0
)
{
ResultCountBeForeApplyPagination
=
result
.
Count
();
}
if
(
pageSize
>
0
)
{
result
=
result
.
Skip
((
page
-
1
)
*
pageSize
);
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment