@@ -17,14 +17,14 @@ namespace Xtensive.Orm.Linq.Expressions
17
17
internal sealed class StructureFieldExpression : FieldExpression ,
18
18
IPersistentExpression
19
19
{
20
- private List < PersistentFieldExpression > fields ;
20
+ private IReadOnlyList < PersistentFieldExpression > fields ;
21
21
public TypeInfo PersistentType { get ; }
22
22
23
23
public bool IsNullable => Owner != null && Owner . IsNullable ;
24
24
25
25
public IReadOnlyList < PersistentFieldExpression > Fields => fields ;
26
26
27
- private void SetFields ( List < PersistentFieldExpression > value )
27
+ private void SetFields ( IReadOnlyList < PersistentFieldExpression > value )
28
28
{
29
29
fields = value ;
30
30
foreach ( var fieldExpression in fields . OfType < FieldExpression > ( ) ) {
@@ -103,10 +103,11 @@ public override StructureFieldExpression BindParameter(ParameterExpression param
103
103
104
104
var result = new StructureFieldExpression ( PersistentType , Field , Mapping , OuterParameter , DefaultIfEmpty ) ;
105
105
processedExpressions . Add ( this , result ) ;
106
- var processedFields = new List < PersistentFieldExpression > ( fields . Count ) ;
106
+ var processedFields = new PersistentFieldExpression [ fields . Count ] ;
107
+ int i = 0 ;
107
108
foreach ( var field in fields ) {
108
109
// Do not convert to LINQ. We want to avoid a closure creation here.
109
- processedFields . Add ( ( PersistentFieldExpression ) field . BindParameter ( parameter , processedExpressions ) ) ;
110
+ processedFields [ i ++ ] = ( PersistentFieldExpression ) field . BindParameter ( parameter , processedExpressions ) ;
110
111
}
111
112
112
113
if ( Owner == null ) {
@@ -127,10 +128,11 @@ public override Expression RemoveOuterParameter(Dictionary<Expression, Expressio
127
128
128
129
var result = new StructureFieldExpression ( PersistentType , Field , Mapping , OuterParameter , DefaultIfEmpty ) ;
129
130
processedExpressions . Add ( this , result ) ;
130
- var processedFields = new List < PersistentFieldExpression > ( fields . Count ) ;
131
+ var processedFields = new PersistentFieldExpression [ fields . Count ] ;
132
+ int i = 0 ;
131
133
foreach ( var field in fields ) {
132
134
// Do not convert to LINQ. We want to avoid a closure creation here.
133
- processedFields . Add ( ( PersistentFieldExpression ) field . RemoveOuterParameter ( processedExpressions ) ) ;
135
+ processedFields [ i ++ ] = ( PersistentFieldExpression ) field . RemoveOuterParameter ( processedExpressions ) ;
134
136
}
135
137
136
138
if ( Owner == null ) {
@@ -149,14 +151,9 @@ public override FieldExpression RemoveOwner()
149
151
return this ;
150
152
}
151
153
152
- var result = new StructureFieldExpression ( PersistentType , Field , Mapping , OuterParameter , DefaultIfEmpty ) {
153
- fields = new List < PersistentFieldExpression > ( fields . Count )
154
+ return new StructureFieldExpression ( PersistentType , Field , Mapping , OuterParameter , DefaultIfEmpty ) {
155
+ fields = fields . Select ( o => ( ( FieldExpression ) o ) . RemoveOwner ( ) ) . ToArray ( )
154
156
} ;
155
- foreach ( var field in fields ) {
156
- result . fields . Add ( ( ( FieldExpression ) field ) . RemoveOwner ( ) ) ;
157
- }
158
-
159
- return result ;
160
157
}
161
158
162
159
public static StructureFieldExpression CreateStructure ( FieldInfo structureField , ColNum offset )
@@ -213,4 +210,4 @@ private StructureFieldExpression(
213
210
PersistentType = persistentType ;
214
211
}
215
212
}
216
- }
213
+ }
0 commit comments