|
9 | 9 |
|
10 | 10 |
|
11 | 11 | using System.Linq;
|
| 12 | +using System.Linq.Expressions; |
12 | 13 | using NHibernate.DomainModel.Northwind.Entities;
|
13 | 14 | using NUnit.Framework;
|
14 | 15 | using NHibernate.Linq;
|
@@ -64,5 +65,43 @@ public async Task CanQueryOnEnumStoredAsString_Small_1Async()
|
64 | 65 |
|
65 | 66 | Assert.AreEqual(expectedCount, query.Count);
|
66 | 67 | }
|
| 68 | + |
| 69 | + [Test] |
| 70 | + public async Task ConditionalNavigationPropertyAsync() |
| 71 | + { |
| 72 | + EnumStoredAsString? type = null; |
| 73 | + await (db.Users.Where(o => o.Enum1 == EnumStoredAsString.Large).ToListAsync()); |
| 74 | + await (db.Users.Where(o => EnumStoredAsString.Large != o.Enum1).ToListAsync()); |
| 75 | + await (db.Users.Where(o => (o.NullableEnum1 ?? EnumStoredAsString.Large) == EnumStoredAsString.Medium).ToListAsync()); |
| 76 | + await (db.Users.Where(o => ((o.NullableEnum1 ?? type) ?? o.Enum1) == EnumStoredAsString.Medium).ToListAsync()); |
| 77 | + |
| 78 | + await (db.Users.Where(o => (o.NullableEnum1.HasValue ? o.Enum1 : EnumStoredAsString.Unspecified) == EnumStoredAsString.Medium).ToListAsync()); |
| 79 | + await (db.Users.Where(o => (o.Enum1 != EnumStoredAsString.Large |
| 80 | + ? (o.NullableEnum1.HasValue ? o.Enum1 : EnumStoredAsString.Unspecified) |
| 81 | + : EnumStoredAsString.Small) == EnumStoredAsString.Medium).ToListAsync()); |
| 82 | + |
| 83 | + |
| 84 | + await (db.Users.Where(o => (o.Enum1 == EnumStoredAsString.Large ? o.Role : o.Role).Name == "test").ToListAsync()); |
| 85 | + } |
| 86 | + |
| 87 | + [Test] |
| 88 | + public async Task CanQueryComplexExpressionOnEnumStoredAsStringAsync() |
| 89 | + { |
| 90 | + var type = EnumStoredAsString.Unspecified; |
| 91 | + var query = await ((from user in db.Users |
| 92 | + where (user.NullableEnum1 == EnumStoredAsString.Large |
| 93 | + ? EnumStoredAsString.Medium |
| 94 | + : user.NullableEnum1 ?? user.Enum1 |
| 95 | + ) == type |
| 96 | + select new |
| 97 | + { |
| 98 | + user, |
| 99 | + simple = user.Enum1, |
| 100 | + condition = user.Enum1 == EnumStoredAsString.Large ? EnumStoredAsString.Medium : user.Enum1, |
| 101 | + coalesce = user.NullableEnum1 ?? EnumStoredAsString.Medium |
| 102 | + }).ToListAsync()); |
| 103 | + |
| 104 | + Assert.That(query.Count, Is.EqualTo(0)); |
| 105 | + } |
67 | 106 | }
|
68 | 107 | }
|
0 commit comments