Skip to content

Commit e0c29c4

Browse files
committed
Merge pull request nhibernate#71 from hazzik/NH-3044
NH 3044: Linq Self-joined query with subquery and order by - order by didn't apply the outer query
2 parents 06dccca + 4b36c94 commit e0c29c4

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/NHibernate.Test/Linq/ByMethod/OrderByTests.cs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,5 +153,29 @@ public void OrderByDoesNotFilterResultsOnJoin()
153153
// We to ToList() first or it skips the generation of the joins.
154154
Assert.AreEqual(allAnimals.ToList().Count(), orderedAnimals.ToList().Count());
155155
}
156+
157+
[Test]
158+
public void OrderByWithSelfReferencedSubquery1()
159+
{
160+
//NH-3044
161+
var result = (from order in db.Orders
162+
where order == db.Orders.OrderByDescending(x => x.OrderDate).First(x => x.Customer == order.Customer)
163+
orderby order.Customer.CustomerId
164+
select order).ToList();
165+
166+
AssertOrderedBy.Ascending(result.Take(5).ToList(), x => x.Customer.CustomerId);
167+
}
168+
169+
[Test]
170+
public void OrderByWithSelfReferencedSubquery2()
171+
{
172+
//NH-3044
173+
var result = (from order in db.Orders
174+
where order == db.Orders.OrderByDescending(x => x.OrderDate).First(x => x.Customer == order.Customer)
175+
orderby order.ShippingDate descending
176+
select order).ToList();
177+
178+
AssertOrderedBy.Descending(result.Take(5).ToList(), x => x.ShippingDate);
179+
}
156180
}
157181
}

src/NHibernate/Linq/IntermediateHqlTree.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ private void ExecuteAddOrderBy(HqlTreeNode orderBy)
121121
if (orderBy == null)
122122
return;
123123

124-
if (!_root.NodesPreOrder.OfType<HqlOrderBy>().Any())
124+
if (!_root.NodesPreOrder.Any(x => x == orderBy))
125125
_root.As<HqlQuery>().AddChild(orderBy);
126126
}
127127

0 commit comments

Comments
 (0)