@@ -17,14 +17,11 @@ public static class ModelBuilderExtensions
1717 /// <param name="expression">The filter expression to apply.</param>
1818 public static void ApplyQueryFilter < TEntity > ( this ModelBuilder modelBuilder , Expression < Func < TEntity , bool > > expression )
1919 {
20- foreach ( var entityType in modelBuilder . Model . GetEntityTypes ( ) )
20+ foreach ( var clrType in modelBuilder . GetEntityTypes < TEntity > ( ) )
2121 {
22- if ( typeof ( TEntity ) . IsAssignableFrom ( entityType . ClrType ) )
23- {
24- var parameter = Expression . Parameter ( entityType . ClrType ) ;
25- var body = ReplacingExpressionVisitor . Replace ( expression . Parameters . Single ( ) , parameter , expression . Body ) ;
26- modelBuilder . Entity ( entityType . ClrType ) . HasQueryFilter ( Expression . Lambda ( body , parameter ) ) ;
27- }
22+ var parameter = Expression . Parameter ( clrType ) ;
23+ var body = ReplacingExpressionVisitor . Replace ( expression . Parameters . Single ( ) , parameter , expression . Body ) ;
24+ modelBuilder . Entity ( clrType ) . HasQueryFilter ( Expression . Lambda ( body , parameter ) ) ;
2825 }
2926 }
3027
@@ -43,7 +40,8 @@ public static void ApplyQueryFilter<TType>(this ModelBuilder modelBuilder, strin
4340 if ( property ? . ClrType == typeof ( TType ) )
4441 {
4542 var parameter = Expression . Parameter ( entityType . ClrType ) ;
46- var filter = Expression . Lambda ( Expression . Equal ( Expression . Property ( parameter , propertyName ) , Expression . Constant ( value ) ) , parameter ) ;
43+ var propertyAccess = Expression . Call ( typeof ( EF ) , nameof ( EF . Property ) , [ typeof ( TType ) ] , parameter , Expression . Constant ( propertyName ) ) ;
44+ var filter = Expression . Lambda ( Expression . Equal ( propertyAccess , Expression . Constant ( value , typeof ( TType ) ) ) , parameter ) ;
4745 modelBuilder . Entity ( entityType . ClrType ) . HasQueryFilter ( filter ) ;
4846 }
4947 }
@@ -65,14 +63,11 @@ public static void ApplyQueryFilter<TType>(this ModelBuilder modelBuilder, strin
6563 /// </remarks>
6664 public static void ApplyQueryFilter < TEntity > ( this ModelBuilder modelBuilder , string filterName , Expression < Func < TEntity , bool > > expression )
6765 {
68- foreach ( var entityType in modelBuilder . Model . GetEntityTypes ( ) )
66+ foreach ( var clrType in modelBuilder . GetEntityTypes < TEntity > ( ) )
6967 {
70- if ( typeof ( TEntity ) . IsAssignableFrom ( entityType . ClrType ) )
71- {
72- var parameter = Expression . Parameter ( entityType . ClrType ) ;
73- var body = ReplacingExpressionVisitor . Replace ( expression . Parameters . Single ( ) , parameter , expression . Body ) ;
74- modelBuilder . Entity ( entityType . ClrType ) . HasQueryFilter ( filterName , Expression . Lambda ( body , parameter ) ) ;
75- }
68+ var parameter = Expression . Parameter ( clrType ) ;
69+ var body = ReplacingExpressionVisitor . Replace ( expression . Parameters . Single ( ) , parameter , expression . Body ) ;
70+ modelBuilder . Entity ( clrType ) . HasQueryFilter ( filterName , Expression . Lambda ( body , parameter ) ) ;
7671 }
7772 }
7873
@@ -98,7 +93,8 @@ public static void ApplyQueryFilter<TType>(this ModelBuilder modelBuilder, strin
9893 if ( property ? . ClrType == typeof ( TType ) )
9994 {
10095 var parameter = Expression . Parameter ( entityType . ClrType ) ;
101- var filter = Expression . Lambda ( Expression . Equal ( Expression . Property ( parameter , propertyName ) , Expression . Constant ( value ) ) , parameter ) ;
96+ var propertyAccess = Expression . Call ( typeof ( EF ) , nameof ( EF . Property ) , [ typeof ( TType ) ] , parameter , Expression . Constant ( propertyName ) ) ;
97+ var filter = Expression . Lambda ( Expression . Equal ( propertyAccess , Expression . Constant ( value , typeof ( TType ) ) ) , parameter ) ;
10298 modelBuilder . Entity ( entityType . ClrType ) . HasQueryFilter ( filterName , filter ) ;
10399 }
104100 }
@@ -123,7 +119,7 @@ public static IEnumerable<Type> GetEntityTypes<TType>(this ModelBuilder modelBui
123119 public static IEnumerable < Type > GetEntityTypes ( this ModelBuilder modelBuilder , Type baseType )
124120 {
125121 var entityTypes = modelBuilder . Model . GetEntityTypes ( )
126- . Where ( t => baseType . IsAssignableFrom ( t . ClrType ) )
122+ . Where ( t => t . ClrType . IsAssignableTo ( baseType ) )
127123 . ToList ( ) ;
128124
129125 return entityTypes . Select ( t => t . ClrType ) ;
0 commit comments