Skip to content

Commit 2a6fb84

Browse files
authored
Merge pull request #6 from servicetitan/closure-allocations
Removed 2 closure allocations from ItemProjectorExpression.EnsureEnti…
2 parents 02cfa7d + 17813b9 commit 2a6fb84

1 file changed

Lines changed: 19 additions & 2 deletions

File tree

Orm/Xtensive.Orm/Orm/Linq/Expressions/ItemProjectorExpression.cs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff 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+
}

0 commit comments

Comments
 (0)