@@ -163,6 +163,140 @@ protected override void PopulateData()
163
163
tx . Complete ( ) ;
164
164
}
165
165
166
+ [ Test ]
167
+ public void MembersAsAliasForSubqhery1 ( )
168
+ {
169
+ using ( var session = Domain . OpenSession ( ) )
170
+ using ( var tx = session . OpenTransaction ( ) ) {
171
+ var query = session . Query . All < Promotion > ( )
172
+ . Select ( promo => new {
173
+ promo ,
174
+ notifications = session . Query . All < Notification > ( )
175
+ } )
176
+ . Select ( anon => new {
177
+ anon ,
178
+ anon . promo ,
179
+ notificationsAlias1 = anon . notifications ,
180
+ notificationsAlias2 = anon . notifications ,
181
+ } )
182
+ . Select ( anon => new {
183
+ contacted = anon . notificationsAlias1 . Select ( c => c . Recipient . User . Id )
184
+ . Union ( anon . notificationsAlias2 . Select ( c => c . Recipient . User . Id ) ) ,
185
+ promo = anon . promo
186
+ } ) . ToArray ( ) ;
187
+
188
+ var expected = session . Query . All < Promotion > ( )
189
+ . Select ( promo => new { promo } )
190
+ . Select ( anon => new {
191
+ contacted = session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id )
192
+ . Union ( session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id ) ) ,
193
+ promo = anon . promo
194
+ } ) . ToArray ( ) ;
195
+
196
+ Assert . That ( query . Length , Is . EqualTo ( expected . Length ) ) ;
197
+
198
+ for ( var i = 0 ; i < expected . Length ; i ++ ) {
199
+ var a1 = expected [ 0 ] ;
200
+ var a2 = query [ 0 ] ;
201
+ var a1contacted = a1 . contacted . ToArray ( ) ;
202
+ var a2contacted = a2 . contacted . ToArray ( ) ;
203
+
204
+ Assert . That ( a1 . promo . Id , Is . EqualTo ( a2 . promo . Id ) ) ;
205
+ Assert . That ( a1contacted . SequenceEqual ( a2contacted ) ) ;
206
+ Assert . That ( a1contacted . Length , Is . Not . Zero ) ;
207
+ }
208
+ }
209
+ }
210
+
211
+ [ Test ]
212
+ public void MembersAsAliasForSubqhery2 ( )
213
+ {
214
+ using ( var session = Domain . OpenSession ( ) )
215
+ using ( var tx = session . OpenTransaction ( ) ) {
216
+ var query = session . Query . All < Promotion > ( )
217
+ . Select ( promo => new {
218
+ promo ,
219
+ notifications = session . Query . All < Notification > ( )
220
+ } )
221
+ . Select ( anon => new {
222
+ anon ,
223
+ anon . promo ,
224
+ notificationsAlias1 = anon . notifications ,
225
+ notificationsAlias2 = anon . notifications ,
226
+ } )
227
+ . Select ( anon => new {
228
+ contacted = anon . anon . notifications . Select ( c => c . Recipient . User . Id )
229
+ . Union ( anon . notificationsAlias1 . Select ( c => c . Recipient . User . Id ) ) ,
230
+ promo = anon . promo
231
+ } ) . ToArray ( ) ;
232
+
233
+ var expected = session . Query . All < Promotion > ( )
234
+ . Select ( promo => new { promo } )
235
+ . Select ( anon => new {
236
+ contacted = session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id )
237
+ . Union ( session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id ) ) ,
238
+ promo = anon . promo
239
+ } ) . ToArray ( ) ;
240
+
241
+ Assert . That ( query . Length , Is . EqualTo ( expected . Length ) ) ;
242
+
243
+ for ( var i = 0 ; i < expected . Length ; i ++ ) {
244
+ var a1 = expected [ 0 ] ;
245
+ var a2 = query [ 0 ] ;
246
+ var a1contacted = a1 . contacted . ToArray ( ) ;
247
+ var a2contacted = a2 . contacted . ToArray ( ) ;
248
+
249
+ Assert . That ( a1 . promo . Id , Is . EqualTo ( a2 . promo . Id ) ) ;
250
+ Assert . That ( a1contacted . SequenceEqual ( a2contacted ) ) ;
251
+ Assert . That ( a1contacted . Length , Is . Not . Zero ) ;
252
+ }
253
+ }
254
+ }
255
+
256
+ [ Test ]
257
+ public void MembersAsAliasForSubqhery3 ( )
258
+ {
259
+ using ( var session = Domain . OpenSession ( ) )
260
+ using ( var tx = session . OpenTransaction ( ) ) {
261
+ var query = session . Query . All < Promotion > ( )
262
+ . Select ( promo => new {
263
+ promo ,
264
+ notifications = session . Query . All < Notification > ( )
265
+ } )
266
+ . Select ( anon => new {
267
+ anon ,
268
+ anon . promo ,
269
+ notificationsAlias1 = anon . notifications ,
270
+ notificationsAlias2 = anon . notifications ,
271
+ } )
272
+ . Select ( anon => new {
273
+ contacted = anon . notificationsAlias1 . Select ( c => c . Recipient . User . Id )
274
+ . Union ( anon . anon . notifications . Select ( c => c . Recipient . User . Id ) ) ,
275
+ promo = anon . promo
276
+ } ) . ToArray ( ) ;
277
+
278
+ var expected = session . Query . All < Promotion > ( )
279
+ . Select ( promo => new { promo } )
280
+ . Select ( anon => new {
281
+ contacted = session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id )
282
+ . Union ( session . Query . All < Notification > ( ) . Select ( c => c . Recipient . User . Id ) ) ,
283
+ promo = anon . promo
284
+ } ) . ToArray ( ) ;
285
+
286
+ Assert . That ( query . Length , Is . EqualTo ( expected . Length ) ) ;
287
+
288
+ for ( var i = 0 ; i < expected . Length ; i ++ ) {
289
+ var a1 = expected [ 0 ] ;
290
+ var a2 = query [ 0 ] ;
291
+ var a1contacted = a1 . contacted . ToArray ( ) ;
292
+ var a2contacted = a2 . contacted . ToArray ( ) ;
293
+
294
+ Assert . That ( a1 . promo . Id , Is . EqualTo ( a2 . promo . Id ) ) ;
295
+ Assert . That ( a1contacted . SequenceEqual ( a2contacted ) ) ;
296
+ Assert . That ( a1contacted . Length , Is . Not . Zero ) ;
297
+ }
298
+ }
299
+ }
166
300
167
301
[ Test ]
168
302
public void BaseQueryReuseWithExcept ( )
0 commit comments