Skip to content

Commit b3b7fe3

Browse files
committed
NH-2782 - Linq - allow to select into property of array type
Fix for NH-2678 (42e537b) can be partially reverted
1 parent 71994bd commit b3b7fe3

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

src/NHibernate.Test/Linq/MethodCallTests.cs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34
using NHibernate.DomainModel.Northwind.Entities;
45
using NUnit.Framework;
@@ -100,6 +101,32 @@ public void CanSelectPropertiesFromAssociationsIntoObjectArray()
100101
Assert.That(result.Length, Is.EqualTo(3));
101102
Assert.That(result[1], Is.EqualTo("Admin"));
102103
Assert.That(result[2], Is.EqualTo("output"));
104+
}
105+
106+
[Test(Description = "NH-2782")]
107+
public void CanSelectPropertiesIntoObjectArrayInProperty()
108+
{
109+
var result = db.Users
110+
.Select(u => new { Cells = new object[] { u.Id, u.Name, new object[u.Id] } })
111+
.First();
112+
113+
var cells = result.Cells;
114+
Assert.That(cells.Length, Is.EqualTo(3));
115+
Assert.That(cells[1], Is.EqualTo("ayende"));
116+
Assert.That(cells[2], Is.InstanceOf<object[]>().And.Length.EqualTo(cells[0]));
117+
}
118+
119+
[Test(Description = "NH-2782")]
120+
public void CanSelectPropertiesIntoPropertyListInProperty()
121+
{
122+
var result = db.Users
123+
.Select(u => new { Cells = new List<object> { u.Id, u.Name, new object[u.Id] } })
124+
.First();
125+
126+
var cells = result.Cells;
127+
Assert.That(cells.Count, Is.EqualTo(3));
128+
Assert.That(cells[1], Is.EqualTo("ayende"));
129+
Assert.That(cells[2], Is.InstanceOf<object[]>().And.Length.EqualTo(cells[0]));
103130
}
104131

105132
[Test, Description("NH-2744")]

src/NHibernate/Linq/Visitors/SelectClauseNominator.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,10 @@ private bool IsRegisteredFunction(Expression expression)
121121
private bool CanBeEvaluatedInHqlSelectStatement(Expression expression, bool projectConstantsInHql)
122122
{
123123
// HQL can't do New or Member Init
124-
if ((expression.NodeType == ExpressionType.MemberInit) || (expression.NodeType == ExpressionType.New))
124+
if (expression.NodeType == ExpressionType.MemberInit ||
125+
expression.NodeType == ExpressionType.New ||
126+
expression.NodeType == ExpressionType.NewArrayInit ||
127+
expression.NodeType == ExpressionType.NewArrayBounds)
125128
{
126129
return false;
127130
}

0 commit comments

Comments
 (0)