diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs index bf0f5b2c2..6385c83b3 100644 --- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs +++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/ExpressionMaterializer.cs @@ -6,6 +6,7 @@ using System.Linq.Expressions; using System.Reflection; +using System.Runtime.InteropServices; using Xtensive.Core; using Xtensive.Linq; using Xtensive.Orm.Internals; @@ -384,10 +385,8 @@ internal protected override Expression VisitEntityExpression(EntityExpression ex /// Unable to materialize Entity. private Expression CreateEntity(IEntityExpression expression, Expression tupleExpression) { - if (!entityRegistry.TryGetValue(expression, out var index)) { - index = entityRegistry.Count; - entityRegistry.Add(expression, index); - } + ref var indexRef = ref CollectionsMarshal.GetValueRefOrAddDefault(entityRegistry, expression, out var exists); + var index = exists ? indexRef : (indexRef = entityRegistry.Count - 1); if (itemMaterializationContextParameter==null) throw new InvalidOperationException(