@@ -130,7 +130,7 @@ public class MismatchAliasAddress
130
130
public string Country { get ; set ; }
131
131
}
132
132
133
- public class LoadReferencesTests
133
+ public class LoadReferencesTests
134
134
: OrmLiteTestBase
135
135
{
136
136
private IDbConnection db ;
@@ -161,7 +161,7 @@ public void TestFixtureTearDown()
161
161
public void Does_not_include_complex_reference_type_in_sql ( )
162
162
{
163
163
db . Select < Customer > ( ) ;
164
- Assert . That ( db . GetLastSql ( ) . NormalizeSql ( ) ,
164
+ Assert . That ( db . GetLastSql ( ) . NormalizeSql ( ) ,
165
165
Is . EqualTo ( "select id, name from customer" ) ) ;
166
166
}
167
167
@@ -293,8 +293,7 @@ public void Can_Save_and_Load_MismatchedAlias_References_using_code_conventions(
293
293
Assert . That ( dbCustomer . PrimaryAddress , Is . Not . Null ) ;
294
294
}
295
295
296
- [ Test ]
297
- public void Can_SaveAllReferences_then_Load_them ( )
296
+ private Customer AddCustomerWithOrders ( )
298
297
{
299
298
var customer = new Customer
300
299
{
@@ -306,13 +305,22 @@ public void Can_SaveAllReferences_then_Load_them()
306
305
State = "Northern Territory" ,
307
306
Country = "Australia"
308
307
} ,
309
- Orders = new [ ] {
310
- new Order { LineItem = "Line 1" , Qty = 1 , Cost = 1.99m } ,
311
- new Order { LineItem = "Line 2" , Qty = 2 , Cost = 2.99m } ,
308
+ Orders = new [ ]
309
+ {
310
+ new Order { LineItem = "Line 1" , Qty = 1 , Cost = 1.99m } ,
311
+ new Order { LineItem = "Line 2" , Qty = 2 , Cost = 2.99m } ,
312
312
} . ToList ( ) ,
313
313
} ;
314
314
315
- db . Save ( customer , references : true ) ;
315
+ db . Save ( customer , references : true ) ;
316
+
317
+ return customer ;
318
+ }
319
+
320
+ [ Test ]
321
+ public void Can_SaveAllReferences_then_Load_them ( )
322
+ {
323
+ var customer = AddCustomerWithOrders ( ) ;
316
324
317
325
Assert . That ( customer . Id , Is . GreaterThan ( 0 ) ) ;
318
326
Assert . That ( customer . PrimaryAddress . CustomerId , Is . EqualTo ( customer . Id ) ) ;
@@ -337,8 +345,146 @@ public void Can_save_with_null_references()
337
345
} ;
338
346
339
347
db . Save ( customer , references : true ) ;
340
-
348
+
341
349
Assert . That ( customer . Id , Is . GreaterThan ( 0 ) ) ;
342
350
}
351
+
352
+
353
+ public class CustomerJoin
354
+ {
355
+ public int Id { get ; set ; }
356
+ public string Name { get ; set ; }
357
+ public string AddressLine1 { get ; set ; }
358
+ public string City { get ; set ; }
359
+ public string LineItem { get ; set ; }
360
+ public decimal Cost { get ; set ; }
361
+ }
362
+
363
+ [ Test ]
364
+ public void Can_do_multiple_joins_with_SqlExpression ( )
365
+ {
366
+ AddCustomerWithOrders ( ) ;
367
+
368
+ var results = db . Select < CustomerJoin , Customer > ( q => q
369
+ . Join < Customer , CustomerAddress > ( )
370
+ . Join < Customer , Order > ( ) ) ;
371
+
372
+ var costs = results . ConvertAll ( x => x . Cost ) ;
373
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m , 2.99m } ) ) ;
374
+
375
+ var expr = db . From < Customer > ( )
376
+ . Join < Customer , CustomerAddress > ( )
377
+ . Join < Customer , Order > ( ) ;
378
+
379
+ results = db . Select < CustomerJoin > ( expr ) ;
380
+
381
+ costs = results . ConvertAll ( x => x . Cost ) ;
382
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m , 2.99m } ) ) ;
383
+ }
384
+
385
+ [ Test ]
386
+ public void Can_do_joins_with_wheres_using_SqlExpression ( )
387
+ {
388
+ AddCustomerWithOrders ( ) ;
389
+
390
+ var results = db . Select < CustomerJoin , Customer > ( q => q
391
+ . Join < Customer , CustomerAddress > ( )
392
+ . Join < Customer , Order > ( ( c , o ) => c . Id == o . CustomerId && o . Cost < 2 ) ) ;
393
+
394
+ var costs = results . ConvertAll ( x => x . Cost ) ;
395
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m } ) ) ;
396
+
397
+ results = db . Select < CustomerJoin , Customer > ( q => q
398
+ . Join < Customer , CustomerAddress > ( )
399
+ . Join < Customer , Order > ( )
400
+ . Where < Order > ( o => o . Cost < 2 ) ) ;
401
+
402
+ costs = results . ConvertAll ( x => x . Cost ) ;
403
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m } ) ) ;
404
+
405
+ results = db . Select < CustomerJoin , Customer > ( q => q
406
+ . Join < Customer , CustomerAddress > ( )
407
+ . Join < Customer , Order > ( )
408
+ . Where < Order > ( o => o . Cost < 2 || o . LineItem == "Line 2" ) ) ;
409
+
410
+ costs = results . ConvertAll ( x => x . Cost ) ;
411
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m , 2.99m } ) ) ;
412
+
413
+ var expr = db . From < Customer > ( )
414
+ . Join < Customer , CustomerAddress > ( )
415
+ . Join < Customer , Order > ( )
416
+ . Where < Order > ( o => o . Cost < 2 || o . LineItem == "Line 2" ) ;
417
+ results = db . Select < CustomerJoin > ( expr ) ;
418
+
419
+ costs = results . ConvertAll ( x => x . Cost ) ;
420
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m , 2.99m } ) ) ;
421
+ }
422
+
423
+ [ Test ]
424
+ public void Can_do_joins_with_complex_wheres_using_SqlExpression ( )
425
+ {
426
+ var customer1 = new Customer
427
+ {
428
+ Name = "Customer 1" ,
429
+ PrimaryAddress = new CustomerAddress
430
+ {
431
+ AddressLine1 = "1 Humpty Street" ,
432
+ City = "Humpty Doo" ,
433
+ State = "Northern Territory" ,
434
+ Country = "Australia"
435
+ } ,
436
+ Orders = new [ ]
437
+ {
438
+ new Order { LineItem = "Line 1" , Qty = 1 , Cost = 1.99m } ,
439
+ new Order { LineItem = "Line 1" , Qty = 2 , Cost = 3.98m } ,
440
+ new Order { LineItem = "Line 2" , Qty = 1 , Cost = 1.49m } ,
441
+ new Order { LineItem = "Line 2" , Qty = 2 , Cost = 2.98m } ,
442
+ new Order { LineItem = "Australia Flag" , Qty = 1 , Cost = 9.99m } ,
443
+ } . ToList ( ) ,
444
+ } ;
445
+
446
+ db . Save ( customer1 , references : true ) ;
447
+
448
+ var customer2 = new Customer
449
+ {
450
+ Name = "Customer 2" ,
451
+ PrimaryAddress = new CustomerAddress
452
+ {
453
+ AddressLine1 = "2 Prospect Park" ,
454
+ City = "Brooklyn" ,
455
+ State = "New York" ,
456
+ Country = "USA"
457
+ } ,
458
+ Orders = new [ ]
459
+ {
460
+ new Order { LineItem = "USA" , Qty = 1 , Cost = 20m } ,
461
+ } . ToList ( ) ,
462
+ } ;
463
+
464
+ db . Save ( customer2 , references : true ) ;
465
+
466
+ var results = db . Select < CustomerJoin , Customer > ( q => q
467
+ . Join < Customer , CustomerAddress > ( )
468
+ . Join < Customer , Order > ( )
469
+ . Where ( c => c . Name == "Customer 1" )
470
+ . And < Order > ( o => o . Cost < 2 )
471
+ . Or < Order > ( o => o . LineItem == "Australia Flag" ) ) ;
472
+
473
+ var costs = results . ConvertAll ( x => x . Cost ) ;
474
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 1.99m , 1.49m , 9.99m } ) ) ;
475
+
476
+ results = db . Select < CustomerJoin , Customer > ( q => q
477
+ . Join < Customer , CustomerAddress > ( )
478
+ . Join < Customer , Order > ( )
479
+ . Where ( c => c . Name == "Customer 2" )
480
+ . And < CustomerAddress , Order > ( ( a , o ) => a . Country == o . LineItem ) ) ;
481
+
482
+ db . GetLastSql ( ) . Print ( ) ;
483
+
484
+ costs = results . ConvertAll ( x => x . Cost ) ;
485
+ Assert . That ( costs , Is . EquivalentTo ( new [ ] { 20m } ) ) ;
486
+ }
487
+
343
488
}
489
+
344
490
}
0 commit comments