From 5bb8d76cac5e0e37328ae781fc412723f076b801 Mon Sep 17 00:00:00 2001 From: Nico Kreipke Date: Tue, 28 Feb 2017 18:55:32 +0100 Subject: [PATCH] Use result type override if present Fixes NH-3665 --- src/NHibernate.Test/Linq/WhereTests.cs | 13 +++++++++++++ .../ProcessFirstOrSingleBase.cs | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/NHibernate.Test/Linq/WhereTests.cs b/src/NHibernate.Test/Linq/WhereTests.cs index ec99887495f..a978d69e3b6 100644 --- a/src/NHibernate.Test/Linq/WhereTests.cs +++ b/src/NHibernate.Test/Linq/WhereTests.cs @@ -795,6 +795,19 @@ public void CanUseCompareInQuery(Expression> expression, int } + [Test(Description = "NH-3665")] + public void SelectOnCollectionReturnsResult() + { + var result = db.Animals.Select(x => new + { + x.Children + }).FirstOrDefault(); + + Assert.That(result, Is.Not.Null); + Assert.That(result.Children, Is.Not.Empty); + } + + private static List CanUseCompareInQueryDataSource() { return new List diff --git a/src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessFirstOrSingleBase.cs b/src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessFirstOrSingleBase.cs index 587c90cc35a..a7bca0100b9 100644 --- a/src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessFirstOrSingleBase.cs +++ b/src/NHibernate/Linq/Visitors/ResultOperatorProcessors/ProcessFirstOrSingleBase.cs @@ -9,7 +9,7 @@ public class ProcessFirstOrSingleBase { protected static void AddClientSideEval(MethodInfo target, QueryModelVisitor queryModelVisitor, IntermediateHqlTree tree) { - var type = queryModelVisitor.Model.SelectClause.Selector.Type; + var type = queryModelVisitor.Model.ResultTypeOverride ?? queryModelVisitor.Model.SelectClause.Selector.Type; target = target.MakeGenericMethod(type); var parameter = Expression.Parameter(typeof(IQueryable<>).MakeGenericType(type), null);