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