@@ -387,6 +387,76 @@ public void CanSelectCollection()
387
387
Assert . AreEqual ( 5 , orders [ 0 ] . Count ) ;
388
388
}
389
389
390
+ [ Test ]
391
+ public void CanSelectConditionalKnownTypes ( )
392
+ {
393
+ var moreThanTwoOrderLinesBool = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? true : false } ) . ToList ( ) ;
394
+ Assert . That ( moreThanTwoOrderLinesBool . Count ( x => x . HasMoreThanTwo == true ) , Is . EqualTo ( 410 ) ) ;
395
+
396
+ var moreThanTwoOrderLinesNBool = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? true : ( bool ? ) null } ) . ToList ( ) ;
397
+ Assert . That ( moreThanTwoOrderLinesNBool . Count ( x => x . HasMoreThanTwo == true ) , Is . EqualTo ( 410 ) ) ;
398
+
399
+ var moreThanTwoOrderLinesShort = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? ( short ) 1 : ( short ) 0 } ) . ToList ( ) ;
400
+ Assert . That ( moreThanTwoOrderLinesShort . Count ( x => x . HasMoreThanTwo == 1 ) , Is . EqualTo ( 410 ) ) ;
401
+
402
+ var moreThanTwoOrderLinesNShort = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? ( short ? ) 1 : ( short ? ) null } ) . ToList ( ) ;
403
+ Assert . That ( moreThanTwoOrderLinesNShort . Count ( x => x . HasMoreThanTwo == 1 ) , Is . EqualTo ( 410 ) ) ;
404
+
405
+ var moreThanTwoOrderLinesInt = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1 : 0 } ) . ToList ( ) ;
406
+ Assert . That ( moreThanTwoOrderLinesInt . Count ( x => x . HasMoreThanTwo == 1 ) , Is . EqualTo ( 410 ) ) ;
407
+
408
+ var moreThanTwoOrderLinesNInt = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1 : ( int ? ) null } ) . ToList ( ) ;
409
+ Assert . That ( moreThanTwoOrderLinesNInt . Count ( x => x . HasMoreThanTwo == 1 ) , Is . EqualTo ( 410 ) ) ;
410
+
411
+ var moreThanTwoOrderLinesDecimal = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1m : 0m } ) . ToList ( ) ;
412
+ Assert . That ( moreThanTwoOrderLinesDecimal . Count ( x => x . HasMoreThanTwo == 1m ) , Is . EqualTo ( 410 ) ) ;
413
+
414
+ var moreThanTwoOrderLinesNDecimal = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1m : ( decimal ? ) null } ) . ToList ( ) ;
415
+ Assert . That ( moreThanTwoOrderLinesNDecimal . Count ( x => x . HasMoreThanTwo == 1m ) , Is . EqualTo ( 410 ) ) ;
416
+
417
+ var moreThanTwoOrderLinesSingle = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1f : 0f } ) . ToList ( ) ;
418
+ Assert . That ( moreThanTwoOrderLinesSingle . Count ( x => x . HasMoreThanTwo == 1f ) , Is . EqualTo ( 410 ) ) ;
419
+
420
+ var moreThanTwoOrderLinesNSingle = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1f : ( float ? ) null } ) . ToList ( ) ;
421
+ Assert . That ( moreThanTwoOrderLinesNSingle . Count ( x => x . HasMoreThanTwo == 1f ) , Is . EqualTo ( 410 ) ) ;
422
+
423
+ var moreThanTwoOrderLinesDouble = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1d : 0d } ) . ToList ( ) ;
424
+ Assert . That ( moreThanTwoOrderLinesDouble . Count ( x => x . HasMoreThanTwo == 1d ) , Is . EqualTo ( 410 ) ) ;
425
+
426
+ var moreThanTwoOrderLinesNDouble = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? 1d : ( double ? ) null } ) . ToList ( ) ;
427
+ Assert . That ( moreThanTwoOrderLinesNDouble . Count ( x => x . HasMoreThanTwo == 1d ) , Is . EqualTo ( 410 ) ) ;
428
+
429
+ var moreThanTwoOrderLinesString = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? "yes" : "no" } ) . ToList ( ) ;
430
+ Assert . That ( moreThanTwoOrderLinesString . Count ( x => x . HasMoreThanTwo == "yes" ) , Is . EqualTo ( 410 ) ) ;
431
+
432
+ var now = DateTime . Now . Date ;
433
+ var moreThanTwoOrderLinesDateTime = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? o . OrderDate . Value : now } ) . ToList ( ) ;
434
+ Assert . That ( moreThanTwoOrderLinesDateTime . Count ( x => x . HasMoreThanTwo != now ) , Is . EqualTo ( 410 ) ) ;
435
+
436
+ var moreThanTwoOrderLinesNDateTime = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? o . OrderDate : null } ) . ToList ( ) ;
437
+ Assert . That ( moreThanTwoOrderLinesNDateTime . Count ( x => x . HasMoreThanTwo != null ) , Is . EqualTo ( 410 ) ) ;
438
+
439
+ var moreThanTwoOrderLinesGuid = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? o . Shipper . Reference : Guid . Empty } ) . ToList ( ) ;
440
+ Assert . That ( moreThanTwoOrderLinesGuid . Count ( x => x . HasMoreThanTwo != Guid . Empty ) , Is . EqualTo ( 410 ) ) ;
441
+
442
+ var moreThanTwoOrderLinesNGuid = db . Orders . Select ( o => new { Id = o . OrderId , HasMoreThanTwo = o . OrderLines . Count ( ) > 2 ? o . Shipper . Reference : ( Guid ? ) null } ) . ToList ( ) ;
443
+ Assert . That ( moreThanTwoOrderLinesNGuid . Count ( x => x . HasMoreThanTwo != null ) , Is . EqualTo ( 410 ) ) ;
444
+ }
445
+
446
+ [ Test ]
447
+ public void CanSelectConditionalEntity ( )
448
+ {
449
+ var fatherInsteadOfChild = db . Animals . Select ( a => a . Father . SerialNumber == "5678" ? a . Father : a ) . ToList ( ) ;
450
+ Assert . That ( fatherInsteadOfChild , Has . Exactly ( 2 ) . With . Property ( "SerialNumber" ) . EqualTo ( "5678" ) ) ;
451
+ }
452
+
453
+ [ Test ]
454
+ public void CanSelectConditionalObject ( )
455
+ {
456
+ var fatherIsKnown = db . Animals . Select ( a => new { a . SerialNumber , Superior = a . Father . SerialNumber , FatherIsKnown = a . Father . SerialNumber == "5678" ? ( object ) true : ( object ) false } ) . ToList ( ) ;
457
+ Assert . That ( fatherIsKnown , Has . Exactly ( 1 ) . With . Property ( "FatherIsKnown" ) . True ) ;
458
+ }
459
+
390
460
public class Wrapper < T >
391
461
{
392
462
public T item ;
0 commit comments