1
+ using System ;
2
+ using System . Collections . ObjectModel ;
3
+ using System . Linq ;
4
+ using NUnit . Framework ;
5
+
6
+ namespace NHibernate . Test . Linq
7
+ {
8
+ [ TestFixture ]
9
+ public class NestedSelectsTests : LinqTestCase
10
+ {
11
+ [ Test ]
12
+ public void OrdersIdWithOrderLinesId ( )
13
+ {
14
+ var orders = db . Orders
15
+ . Select ( o => new
16
+ {
17
+ o . OrderId ,
18
+ OrderLinesIds = o . OrderLines . Select ( ol => ol . Id ) . ToArray ( )
19
+ } )
20
+ . ToList ( ) ;
21
+
22
+ Assert . That ( orders . Count , Is . EqualTo ( 830 ) ) ;
23
+ }
24
+
25
+ [ Test ]
26
+ public void OrdersOrderLinesId ( )
27
+ {
28
+ var orders = db . Orders
29
+ . Select ( o => new
30
+ {
31
+ OrderLinesIds = o . OrderLines . Select ( ol => ol . Id ) . ToArray ( )
32
+ } )
33
+ . ToList ( ) ;
34
+
35
+ Assert . That ( orders . Count , Is . EqualTo ( 830 ) ) ;
36
+ }
37
+
38
+ [ Test ]
39
+ public void OrdersIdWithOrderLinesIdShouldBeNotLazy ( )
40
+ {
41
+ var orders = db . Orders
42
+ . Select ( o => new
43
+ {
44
+ o . OrderId ,
45
+ OrderLinesIds = o . OrderLines . Select ( ol => ol . Id )
46
+ } )
47
+ . ToList ( ) ;
48
+
49
+ Assert . That ( orders . Count , Is . EqualTo ( 830 ) ) ;
50
+ Assert . That ( orders [ 0 ] . OrderLinesIds , Is . InstanceOf < ReadOnlyCollection < long > > ( ) ) ;
51
+ }
52
+
53
+ [ Test ]
54
+ public void OrdersIdWithOrderLinesIdToArray ( )
55
+ {
56
+ var orders = db . Orders
57
+ . Select ( o => new
58
+ {
59
+ o . OrderId ,
60
+ OrderLinesIds = o . OrderLines . Select ( ol => ol . Id ) . ToArray ( )
61
+ } )
62
+ . ToArray ( ) ;
63
+
64
+ Assert . That ( orders . Length , Is . EqualTo ( 830 ) ) ;
65
+ }
66
+
67
+ [ Test ]
68
+ public void OrdersIdWithOrderLinesIdAndDiscount ( )
69
+ {
70
+ var orders = db . Orders
71
+ . Select ( o =>
72
+ new
73
+ {
74
+ o . OrderId ,
75
+ OrderLines = o . OrderLines . Select ( ol =>
76
+ new
77
+ {
78
+ ol . Id ,
79
+ ol . Discount
80
+ } ) . ToArray ( )
81
+ } )
82
+ . ToList ( ) ;
83
+
84
+ Assert . That ( orders . Count , Is . EqualTo ( 830 ) ) ;
85
+ }
86
+
87
+ [ Test ]
88
+ public void OrdersIdAndDateWithOrderLinesIdAndDiscount ( )
89
+ {
90
+ var orders = db . Orders
91
+ . Select ( o =>
92
+ new
93
+ {
94
+ o . OrderId ,
95
+ o . OrderDate ,
96
+ OrderLines = o . OrderLines . Select ( ol =>
97
+ new
98
+ {
99
+ ol . Id ,
100
+ ol . Discount
101
+ } ) . ToArray ( )
102
+ } )
103
+ . ToList ( ) ;
104
+
105
+ Assert . That ( orders . Count , Is . EqualTo ( 830 ) ) ;
106
+ }
107
+
108
+ [ Test ]
109
+ public void TimesheetIdAndUserLastLoginDates ( )
110
+ {
111
+ var timesheets = db . Timesheets
112
+ . Select ( o =>
113
+ new
114
+ {
115
+ o . Id ,
116
+ Users = o . Users . Select ( x => x . LastLoginDate ) . ToArray ( )
117
+ } )
118
+ . ToList ( ) ;
119
+
120
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
121
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
122
+ }
123
+
124
+ [ Test ]
125
+ public void TimesheetIdAndUserLastLoginDatesAndEntriesIds ( )
126
+ {
127
+ var timesheets = db . Timesheets
128
+ . Select ( o =>
129
+ new
130
+ {
131
+ o . Id ,
132
+ LastLoginDates = o . Users . Select ( u => u . LastLoginDate ) . ToArray ( ) ,
133
+ EntriesIds = o . Entries . Select ( e => e . Id ) . ToArray ( )
134
+ } )
135
+ . ToList ( ) ;
136
+
137
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
138
+ Assert . That ( timesheets [ 0 ] . LastLoginDates , Is . Not . Empty ) ;
139
+ }
140
+
141
+ [ Test ( Description = "NH-2986" ) ]
142
+ public void TimesheetIdAndUsersTransparentProjection ( )
143
+ {
144
+ var timesheets = db . Timesheets
145
+ . Select ( o =>
146
+ new
147
+ {
148
+ o . Id ,
149
+ Users = o . Users . Select ( x => x )
150
+ } )
151
+ . ToList ( ) ;
152
+
153
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
154
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
155
+ }
156
+
157
+ [ Test ( Description = "NH-2986" ) ]
158
+ public void TimesheetAndUsersTransparentProjection ( )
159
+ {
160
+ var timesheets = db . Timesheets
161
+ . Select ( o =>
162
+ new
163
+ {
164
+ o ,
165
+ Users = o . Users . Select ( x => x )
166
+ } )
167
+ . ToList ( ) ;
168
+
169
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
170
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
171
+ }
172
+
173
+ [ Test ( Description = "NH-2986" ) ]
174
+ public void TimesheetUsersTransparentProjection ( )
175
+ {
176
+ var timesheets = db . Timesheets
177
+ . Select ( o =>
178
+ new
179
+ {
180
+ Users = o . Users . Select ( x => x )
181
+ } )
182
+ . ToList ( ) ;
183
+
184
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
185
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
186
+ }
187
+
188
+ [ Test ( Description = "NH-2986" ) ]
189
+ public void TimesheetIdAndUsersAndEntriesTransparentProjection ( )
190
+ {
191
+ var timesheets = db . Timesheets
192
+ . Select ( o =>
193
+ new
194
+ {
195
+ o . Id ,
196
+ Users = o . Users . Select ( x => x ) ,
197
+ Entries = o . Entries . Select ( x => x )
198
+ } )
199
+ . ToList ( ) ;
200
+
201
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
202
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
203
+ }
204
+
205
+ [ Test ( Description = "NH-2986" ) ]
206
+ public void TimesheetAndUsersAndEntriesTransparentProjection ( )
207
+ {
208
+ var timesheets = db . Timesheets
209
+ . Select ( o =>
210
+ new
211
+ {
212
+ o ,
213
+ Users = o . Users . Select ( x => x ) ,
214
+ Entries = o . Entries . Select ( x => x )
215
+ } )
216
+ . ToList ( ) ;
217
+
218
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
219
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
220
+ }
221
+
222
+ [ Test ( Description = "NH-2986" ) ]
223
+ public void TimesheetUsersAndEntriesTransparentProjection ( )
224
+ {
225
+ var timesheets = db . Timesheets
226
+ . Select ( o =>
227
+ new
228
+ {
229
+ Users = o . Users . Select ( x => x ) ,
230
+ Entries = o . Entries . Select ( x => x )
231
+ } )
232
+ . ToList ( ) ;
233
+
234
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
235
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
236
+ }
237
+
238
+ [ Test ( Description = "NH-3333" ) ]
239
+ public void TimesheetIdAndUsers ( )
240
+ {
241
+ var timesheets = db . Timesheets
242
+ . Select ( o =>
243
+ new
244
+ {
245
+ o . Id ,
246
+ o . Users
247
+ } )
248
+ . ToList ( ) ;
249
+
250
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
251
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
252
+ }
253
+
254
+ [ Test ( Description = "NH-3333" ) ]
255
+ public void TimesheetAndUsers ( )
256
+ {
257
+ var timesheets = db . Timesheets
258
+ . Select ( o =>
259
+ new
260
+ {
261
+ o ,
262
+ o . Users
263
+ } )
264
+ . ToList ( ) ;
265
+
266
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
267
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
268
+ }
269
+
270
+ [ Test ( Description = "NH-3333" ) ]
271
+ public void TimesheetUsers ( )
272
+ {
273
+ var timesheets = db . Timesheets
274
+ . Select ( o =>
275
+ new
276
+ {
277
+ o . Users
278
+ } )
279
+ . ToList ( ) ;
280
+
281
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
282
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
283
+ }
284
+
285
+ [ Test ( Description = "NH-3333" ) ]
286
+ public void TimesheetIdAndUsersAndEntries ( )
287
+ {
288
+ var timesheets = db . Timesheets
289
+ . Select ( o =>
290
+ new
291
+ {
292
+ o . Id ,
293
+ o . Users ,
294
+ o . Entries
295
+ } )
296
+ . ToList ( ) ;
297
+
298
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
299
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
300
+ }
301
+
302
+ [ Test ( Description = "NH-3333" ) ]
303
+ public void TimesheetAndUsersAndEntries ( )
304
+ {
305
+ var timesheets = db . Timesheets
306
+ . Select ( o =>
307
+ new
308
+ {
309
+ o ,
310
+ o . Users ,
311
+ o . Entries
312
+ } )
313
+ . ToList ( ) ;
314
+
315
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
316
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
317
+ }
318
+
319
+ [ Test ( Description = "NH-3333" ) ]
320
+ public void TimesheetUsersAndEntries ( )
321
+ {
322
+ var timesheets = db . Timesheets
323
+ . Select ( o =>
324
+ new
325
+ {
326
+ o . Users ,
327
+ o . Entries
328
+ } )
329
+ . ToList ( ) ;
330
+
331
+ Assert . That ( timesheets . Count , Is . EqualTo ( 3 ) ) ;
332
+ Assert . That ( timesheets [ 0 ] . Users , Is . Not . Empty ) ;
333
+ }
334
+
335
+ [ Test ]
336
+ public void EmployeesIdAndWithSubordinatesId ( )
337
+ {
338
+ var emplyees = db . Employees
339
+ . Select ( o =>
340
+ new
341
+ {
342
+ o . EmployeeId ,
343
+ SubordinatesIds = o . Subordinates . Select ( so => so . EmployeeId ) . ToArray ( )
344
+ } )
345
+ . ToList ( ) ;
346
+
347
+ Assert . That ( emplyees . Count , Is . EqualTo ( 9 ) ) ;
348
+ }
349
+ }
350
+ }
0 commit comments