@@ -22,34 +22,20 @@ public IQueryable<T> IncludeEntity<T>(IQueryable<T> queryable, string includedEn
22
22
public T SingleOrDefault < T > ( object query , string param , object value )
23
23
{
24
24
var queryable = ( IQueryable < T > ) query ;
25
- var currentType = queryable . ElementType ;
26
- var property = currentType . GetProperty ( param ) ;
27
-
28
- if ( property == null )
29
- {
30
- throw new ArgumentException ( $ "'{ param } ' is not a valid property of '{ currentType } '") ;
31
- }
32
-
33
- // convert the incoming value to the target value type
34
- // "1" -> 1
35
- var convertedValue = Convert . ChangeType ( value , property . PropertyType ) ;
36
- // {model}
37
- var prm = Expression . Parameter ( currentType , "model" ) ;
38
- // {model.Id}
39
- var left = Expression . PropertyOrField ( prm , property . Name ) ;
40
- // {1}
41
- var right = Expression . Constant ( convertedValue , property . PropertyType ) ;
42
- // {model.Id == 1}
43
- var body = Expression . Equal ( left , right ) ;
44
- var where = Expression . Lambda < Func < T , bool > > ( body , prm ) ;
45
-
46
- return queryable . SingleOrDefault ( where ) ;
25
+ var expression = GetEqualityExpressionForProperty ( queryable , param , value ) ;
26
+ return queryable . SingleOrDefault ( expression ) ;
47
27
}
48
28
49
29
public IQueryable < T > Where < T > ( object query , string param , object value )
50
30
{
51
31
var queryable = ( IQueryable < T > ) query ;
52
- var currentType = queryable . ElementType ;
32
+ var expression = GetEqualityExpressionForProperty ( queryable , param , value ) ;
33
+ return queryable . Where ( expression ) ;
34
+ }
35
+
36
+ private Expression < Func < T , bool > > GetEqualityExpressionForProperty < T > ( IQueryable < T > query , string param , object value )
37
+ {
38
+ var currentType = query . ElementType ;
53
39
var property = currentType . GetProperty ( param ) ;
54
40
55
41
if ( property == null )
@@ -68,9 +54,7 @@ public IQueryable<T> Where<T>(object query, string param, object value)
68
54
var right = Expression . Constant ( convertedValue , property . PropertyType ) ;
69
55
// {model.Id == 1}
70
56
var body = Expression . Equal ( left , right ) ;
71
- var where = Expression . Lambda < Func < T , bool > > ( body , prm ) ;
72
-
73
- return queryable . Where ( where ) ;
57
+ return Expression . Lambda < Func < T , bool > > ( body , prm ) ;
74
58
}
75
59
}
76
60
}
0 commit comments