diff --git a/src/NHibernate.Test/Async/Linq/ByMethod/JoinTests.cs b/src/NHibernate.Test/Async/Linq/ByMethod/JoinTests.cs new file mode 100644 index 00000000000..6d11edace21 --- /dev/null +++ b/src/NHibernate.Test/Async/Linq/ByMethod/JoinTests.cs @@ -0,0 +1,35 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by AsyncGenerator. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + + +using System.Linq; +using NUnit.Framework; +using NHibernate.Linq; + +namespace NHibernate.Test.Linq.ByMethod +{ + using System.Threading.Tasks; + [TestFixture] + public class JoinTestsAsync : LinqTestCase + { + [Test] + public async Task MultipleLinqJoinsWithSameProjectionNamesAsync() + { + var orders = await (db.Orders + .Join(db.Orders, x => x.OrderId, x => x.OrderId - 1, (order, order1) => new { order, order1 }) + .Select(x => new { First = x.order, Second = x.order1 }) + .Join(db.Orders, x => x.First.OrderId, x => x.OrderId - 2, (order, order1) => new { order, order1 }) + .Select(x => new { FirstId = x.order.First.OrderId, SecondId = x.order.Second.OrderId, ThirdId = x.order1.OrderId }) + .ToListAsync()); + + Assert.That(orders.Count, Is.EqualTo(828)); + Assert.IsTrue(orders.All(x => x.FirstId == x.SecondId - 1 && x.SecondId == x.ThirdId - 1)); + } + } +} diff --git a/src/NHibernate.Test/Linq/ByMethod/JoinTests.cs b/src/NHibernate.Test/Linq/ByMethod/JoinTests.cs new file mode 100644 index 00000000000..1d78b46b181 --- /dev/null +++ b/src/NHibernate.Test/Linq/ByMethod/JoinTests.cs @@ -0,0 +1,23 @@ +using System.Linq; +using NUnit.Framework; + +namespace NHibernate.Test.Linq.ByMethod +{ + [TestFixture] + public class JoinTests : LinqTestCase + { + [Test] + public void MultipleLinqJoinsWithSameProjectionNames() + { + var orders = db.Orders + .Join(db.Orders, x => x.OrderId, x => x.OrderId - 1, (order, order1) => new { order, order1 }) + .Select(x => new { First = x.order, Second = x.order1 }) + .Join(db.Orders, x => x.First.OrderId, x => x.OrderId - 2, (order, order1) => new { order, order1 }) + .Select(x => new { FirstId = x.order.First.OrderId, SecondId = x.order.Second.OrderId, ThirdId = x.order1.OrderId }) + .ToList(); + + Assert.That(orders.Count, Is.EqualTo(828)); + Assert.IsTrue(orders.All(x => x.FirstId == x.SecondId - 1 && x.SecondId == x.ThirdId - 1)); + } + } +} diff --git a/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs b/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs index 1a87c9705a1..5325df9cf95 100644 --- a/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs +++ b/src/NHibernate/Linq/Visitors/QueryModelVisitor.cs @@ -499,13 +499,14 @@ public override void VisitJoinClause(JoinClause joinClause, QueryModel queryMode { var equalityVisitor = new EqualityHqlGenerator(VisitorParameters); var whereClause = equalityVisitor.Visit(joinClause.InnerKeySelector, joinClause.OuterKeySelector); + var querySourceName = VisitorParameters.QuerySourceNamer.GetName(joinClause); _hqlTree.AddWhereClause(whereClause); _hqlTree.AddFromClause( _hqlTree.TreeBuilder.Range( HqlGeneratorExpressionVisitor.Visit(joinClause.InnerSequence, VisitorParameters), - _hqlTree.TreeBuilder.Alias(joinClause.ItemName))); + _hqlTree.TreeBuilder.Alias(querySourceName))); } public override void VisitGroupJoinClause(GroupJoinClause groupJoinClause, QueryModel queryModel, int index)