File tree Expand file tree Collapse file tree
Orm/Xtensive.Orm/Orm/Linq/Expressions Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -117,8 +117,25 @@ public ItemProjectorExpression EnsureEntityIsJoined()
117117 if ( e is EntityExpression ) {
118118 var entityExpression = ( EntityExpression ) e ;
119119 var typeInfo = entityExpression . PersistentType ;
120- if ( typeInfo . Fields . All ( fieldInfo => entityExpression . Fields . Any ( entityField => entityField . Name == fieldInfo . Name ) ) )
120+
121+ // Converted from LINQ to get rid of 2 closure allocations
122+ var all = true ;
123+ foreach ( var fieldInfo in typeInfo . Fields ) {
124+ var isUsedInEntityExpression = false ;
125+ foreach ( var entityField in entityExpression . Fields ) {
126+ if ( entityField . Name == fieldInfo . Name ) {
127+ isUsedInEntityExpression = true ;
128+ break ;
129+ }
130+ }
131+ if ( ! isUsedInEntityExpression ) {
132+ all = false ;
133+ break ;
134+ }
135+ }
136+ if ( all )
121137 return entityExpression ;
138+
122139 var joinedIndex = typeInfo . Indexes . PrimaryIndex ;
123140 var joinedRs = joinedIndex . GetQuery ( ) . Alias ( Context . GetNextAlias ( ) ) ;
124141 var keySegment = entityExpression . Key . Mapping ;
@@ -184,4 +201,4 @@ ex is SubQueryExpression
184201 Item = applyParameterReplacer . Replace ( expression ) ;
185202 }
186203 }
187- }
204+ }
You can’t perform that action at this time.
0 commit comments