@@ -63,10 +63,9 @@ public static Expression<Func<Tuple, bool>> BuildFilterLambda(int startIndex, IR
6363 return FastExpression . Lambda < Func < Tuple , bool > > ( filterExpression , TupleParameter ) ;
6464 }
6565
66- private static Expression CreateEntityQuery ( Type elementType )
66+ private static Expression CreateEntityQuery ( Type elementType , Domain domain )
6767 {
68- var queryAll = WellKnownMembers . Query . All . MakeGenericMethod ( elementType ) ;
69- return Expression . Call ( null , queryAll ) ;
68+ return domain . RootCallExpressionsCache . GetOrAdd ( elementType , ( t ) => Expression . Call ( null , WellKnownMembers . Query . All . MakeGenericMethod ( elementType ) ) ) ;
7069 }
7170
7271 public static bool IsDirectEntitySetQuery ( Expression entitySet )
@@ -106,7 +105,7 @@ public static Expression CreateDirectEntitySetQuery(EntitySetBase entitySet)
106105 return Expression . Convert ( Expression . Call ( Expression . Constant ( owner ) , indexers . Single ( ) , new [ ] { Expression . Constant ( entitySet . Field . Name ) } ) , entitySet . Field . ValueType ) ;
107106 }
108107
109- public static Expression CreateEntitySetQuery ( Expression ownerEntity , FieldInfo field )
108+ public static Expression CreateEntitySetQuery ( Expression ownerEntity , FieldInfo field , Domain domain )
110109 {
111110 if ( ! field . IsDynamicallyDefined && ! field . UnderlyingProperty . PropertyType . IsOfGenericType ( WellKnownOrmTypes . EntitySetOfT ) ) {
112111 throw Exceptions . InternalError ( Strings . ExFieldMustBeOfEntitySetType , OrmLog . Instance ) ;
@@ -131,7 +130,7 @@ public static Expression CreateEntitySetQuery(Expression ownerEntity, FieldInfo
131130 ) ;
132131 return Expression . Call (
133132 WellKnownMembers . Queryable . Where . MakeGenericMethod ( elementType ) ,
134- CreateEntityQuery ( elementType ) ,
133+ CreateEntityQuery ( elementType , domain ) ,
135134 FastExpression . Lambda ( whereExpression , whereParameter )
136135 ) ;
137136 }
@@ -156,7 +155,7 @@ public static Expression CreateEntitySetQuery(Expression ownerEntity, FieldInfo
156155
157156 var outerQuery = Expression . Call (
158157 WellKnownMembers . Queryable . Where . MakeGenericMethod ( connectorType ) ,
159- CreateEntityQuery ( connectorType ) ,
158+ CreateEntityQuery ( connectorType , domain ) ,
160159 FastExpression . Lambda ( filterExpression , filterParameter )
161160 ) ;
162161
@@ -168,7 +167,7 @@ public static Expression CreateEntitySetQuery(Expression ownerEntity, FieldInfo
168167 var innerSelector = FastExpression . Lambda ( innerSelectorParameter , innerSelectorParameter ) ;
169168 var resultSelector = FastExpression . Lambda ( innerSelectorParameter , outerSelectorParameter , innerSelectorParameter ) ;
170169
171- var innerQuery = CreateEntityQuery ( elementType ) ;
170+ var innerQuery = CreateEntityQuery ( elementType , domain ) ;
172171 var joinMethodInfo = WellKnownMembers . Queryable . Join
173172 . MakeGenericMethod ( new [ ] {
174173 connectorType ,
0 commit comments