@@ -109,10 +109,15 @@ public override bool EqualsSnapshot(ICollectionPersister persister)
109
109
return false ;
110
110
}
111
111
112
- return ! ( from object obj in WrappedSet
113
- let oldValue = snapshot [ ( T ) obj ]
114
- where oldValue == null || elementType . IsDirty ( oldValue , obj , Session )
115
- select obj ) . Any ( ) ;
112
+
113
+ foreach ( T obj in WrappedSet )
114
+ {
115
+ T oldValue ;
116
+ if ( ! snapshot . TryGetValue ( obj , out oldValue ) || elementType . IsDirty ( oldValue , obj , Session ) )
117
+ return false ;
118
+ }
119
+
120
+ return true ;
116
121
}
117
122
118
123
public override bool IsSnapshotEmpty ( object snapshot )
@@ -138,10 +143,10 @@ public override void InitializeFromCache(ICollectionPersister persister, object
138
143
BeforeInitialize ( persister , size ) ;
139
144
for ( int i = 0 ; i < size ; i ++ )
140
145
{
141
- var element = ( T ) persister . ElementType . Assemble ( array [ i ] , Session , owner ) ;
146
+ var element = persister . ElementType . Assemble ( array [ i ] , Session , owner ) ;
142
147
if ( element != null )
143
148
{
144
- WrappedSet . Add ( element ) ;
149
+ WrappedSet . Add ( ( T ) element ) ;
145
150
}
146
151
}
147
152
SetInitialized ( ) ;
@@ -160,10 +165,10 @@ public override string ToString()
160
165
161
166
public override object ReadFrom ( IDataReader rs , ICollectionPersister role , ICollectionAliases descriptor , object owner )
162
167
{
163
- var element = ( T ) role . ReadElement ( rs , owner , descriptor . SuffixedElementAliases , Session ) ;
168
+ var element = role . ReadElement ( rs , owner , descriptor . SuffixedElementAliases , Session ) ;
164
169
if ( element != null )
165
170
{
166
- _tempList . Add ( element ) ;
171
+ _tempList . Add ( ( T ) element ) ;
167
172
}
168
173
return element ;
169
174
}
@@ -219,22 +224,26 @@ public override IEnumerable GetDeletes(ICollectionPersister persister, bool inde
219
224
220
225
deletes . AddRange ( sn . Where ( obj => ! WrappedSet . Contains ( obj ) ) ) ;
221
226
222
- deletes . AddRange ( from obj in WrappedSet
223
- let oldValue = sn [ obj ]
224
- where oldValue != null && elementType . IsDirty ( obj , oldValue , Session )
225
- select oldValue ) ;
227
+
228
+ foreach ( var obj in WrappedSet )
229
+ {
230
+ T oldValue ;
231
+ if ( sn . TryGetValue ( obj , out oldValue ) && elementType . IsDirty ( obj , oldValue , Session ) )
232
+ deletes . Add ( oldValue ) ;
233
+ }
226
234
227
235
return deletes ;
228
236
}
229
237
230
238
public override bool NeedsInserting ( object entry , int i , IType elemType )
231
239
{
232
240
var sn = ( ISetSnapshot < T > ) GetSnapshot ( ) ;
233
- object oldKey = sn [ ( T ) entry ] ;
241
+ T oldKey ;
242
+
234
243
// note that it might be better to iterate the snapshot but this is safe,
235
244
// assuming the user implements equals() properly, as required by the PersistentSet
236
245
// contract!
237
- return oldKey == null || elemType . IsDirty ( oldKey , entry , Session ) ;
246
+ return ! sn . TryGetValue ( ( T ) entry , out oldKey ) || elemType . IsDirty ( oldKey , entry , Session ) ;
238
247
}
239
248
240
249
public override bool NeedsUpdating ( object entry , int i , IType elemType )
0 commit comments