diff --git a/src/NHibernate.DomainModel/Northwind/Entities/Order.cs b/src/NHibernate.DomainModel/Northwind/Entities/Order.cs index ea01182d4c5..cdf7f7387a5 100755 --- a/src/NHibernate.DomainModel/Northwind/Entities/Order.cs +++ b/src/NHibernate.DomainModel/Northwind/Entities/Order.cs @@ -47,6 +47,8 @@ public virtual DateTime? OrderDate set { _orderDate = value; } } + public virtual DateTime RequiredOrderDate { get; set; } + public virtual DateTime? RequiredDate { get { return _requiredDate; } @@ -106,4 +108,4 @@ public virtual void RemoveOrderLine(OrderLine orderLine) } } } -} \ No newline at end of file +} diff --git a/src/NHibernate.DomainModel/Northwind/Mappings/Order.hbm.xml b/src/NHibernate.DomainModel/Northwind/Mappings/Order.hbm.xml index efae7f61cb9..b0fa0c4949f 100755 --- a/src/NHibernate.DomainModel/Northwind/Mappings/Order.hbm.xml +++ b/src/NHibernate.DomainModel/Northwind/Mappings/Order.hbm.xml @@ -17,6 +17,9 @@ + + + @@ -60,4 +63,4 @@ - \ No newline at end of file + diff --git a/src/NHibernate.Test/Async/Linq/WhereTests.cs b/src/NHibernate.Test/Async/Linq/WhereTests.cs index 3afa7cda451..b357edc1c82 100644 --- a/src/NHibernate.Test/Async/Linq/WhereTests.cs +++ b/src/NHibernate.Test/Async/Linq/WhereTests.cs @@ -848,6 +848,27 @@ public async Task ContainsOnPersistedCollectionAsync() Assert.That(result.SerialNumber, Is.EqualTo("1121")); } + [Test] + public async Task CanCompareAggregateResultAsync() + { + if (!Dialect.SupportsScalarSubSelects) + { + Assert.Ignore(Dialect.GetType().Name + " does not support scalar sub-queries"); + } + + await (session.Query() + .Select(o => new AggregateDate { Id = o.CustomerId, MaxDate = o.Orders.Max(l => l.RequiredOrderDate)}) + .Where(o => o.MaxDate <= DateTime.Today && o.MaxDate >= DateTime.Today) + .ToListAsync()); + } + + private class AggregateDate + { + public string Id { get; set; } + + public DateTime? MaxDate { get; set; } + } + private static List CanUseCompareInQueryDataSource() { return new List diff --git a/src/NHibernate.Test/Linq/WhereTests.cs b/src/NHibernate.Test/Linq/WhereTests.cs index f991df12030..78c5290064e 100644 --- a/src/NHibernate.Test/Linq/WhereTests.cs +++ b/src/NHibernate.Test/Linq/WhereTests.cs @@ -849,6 +849,27 @@ public void ContainsOnPersistedCollection() Assert.That(result.SerialNumber, Is.EqualTo("1121")); } + [Test] + public void CanCompareAggregateResult() + { + if (!Dialect.SupportsScalarSubSelects) + { + Assert.Ignore(Dialect.GetType().Name + " does not support scalar sub-queries"); + } + + session.Query() + .Select(o => new AggregateDate { Id = o.CustomerId, MaxDate = o.Orders.Max(l => l.RequiredOrderDate)}) + .Where(o => o.MaxDate <= DateTime.Today && o.MaxDate >= DateTime.Today) + .ToList(); + } + + private class AggregateDate + { + public string Id { get; set; } + + public DateTime? MaxDate { get; set; } + } + private static List CanUseCompareInQueryDataSource() { return new List diff --git a/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs b/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs index 0022897b09f..2a285ff5311 100644 --- a/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs +++ b/src/NHibernate/Linq/Visitors/HqlGeneratorExpressionVisitor.cs @@ -317,8 +317,8 @@ protected HqlTreeNode VisitBinaryExpression(BinaryExpression expression) var rightType = GetExpressionType(expression.Right); if (leftType != null && leftType == rightType) { - _notCastableExpressions.Add(expression.Left, leftType); - _notCastableExpressions.Add(expression.Right, rightType); + _notCastableExpressions[expression.Left] = leftType; + _notCastableExpressions[expression.Right] = rightType; } if (expression.NodeType == ExpressionType.Equal)