Skip to content

Commit e34e33d

Browse files
committed
Improve performance of ItemProjectorExpression class
1 parent 27ccc04 commit e34e33d

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
// Created: 2009.05.06
66

77
using System.Collections.Generic;
8-
using System.Linq;
98
using System.Linq.Expressions;
109
using Xtensive.Core;
1110
using Xtensive.Orm.Linq.Expressions.Visitors;
@@ -139,9 +138,12 @@ public ItemProjectorExpression EnsureEntityIsJoined()
139138
var joinedIndex = typeInfo.Indexes.PrimaryIndex;
140139
var joinedRs = joinedIndex.GetQuery().Alias(Context.GetNextAlias());
141140
var keySegment = entityExpression.Key.Mapping;
142-
var keyPairs = keySegment.GetItems()
143-
.Select((leftIndex, rightIndex) => new Pair<int>(leftIndex, rightIndex))
144-
.ToArray();
141+
var keyPairs = new Pair<int>[keySegment.Length];
142+
var rightIndex = 0;
143+
foreach (var leftIndex in keySegment.GetItems()) {
144+
keyPairs[rightIndex] = new Pair<int>(leftIndex, rightIndex);
145+
rightIndex++;
146+
}
145147
var offset = dataSource.Header.Length;
146148
var dataSourceAsJoin = dataSource as JoinProvider;
147149
dataSource = entityExpression.IsNullable || (dataSourceAsJoin!=null && dataSourceAsJoin.JoinType==JoinType.LeftOuter)
@@ -158,9 +160,12 @@ public ItemProjectorExpression EnsureEntityIsJoined()
158160
var joinedIndex = typeInfo.Indexes.PrimaryIndex;
159161
var joinedRs = joinedIndex.GetQuery().Alias(Context.GetNextAlias());
160162
var keySegment = entityFieldExpression.Mapping;
161-
var keyPairs = keySegment.GetItems()
162-
.Select((leftIndex, rightIndex) => new Pair<int>(leftIndex, rightIndex))
163-
.ToArray();
163+
var keyPairs = new Pair<int>[keySegment.Length];
164+
var rightIndex = 0;
165+
foreach (var leftIndex in keySegment.GetItems()) {
166+
keyPairs[rightIndex] = new Pair<int>(leftIndex, rightIndex);
167+
rightIndex++;
168+
}
164169
var offset = dataSource.Header.Length;
165170
var dataSourceAsJoin = dataSource as JoinProvider;
166171
dataSource = entityFieldExpression.IsNullable || (dataSourceAsJoin!=null && dataSourceAsJoin.JoinType==JoinType.LeftOuter)

0 commit comments

Comments
 (0)