Skip to content

Commit 4e5baf7

Browse files
committed
Fix NH-2850 - Unable to use enums in NH 3.2 QueryOver checked comparison
1 parent d8aaf2c commit 4e5baf7

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

src/NHibernate.Test/Criteria/Lambda/ExpressionProcessorFixture.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,28 @@ public void TestEvaluateEnumeration()
231231
Assert.AreEqual(before.ToString(), after.ToString());
232232
}
233233

234+
[Test]
235+
public void TestUnaryConversionChecked()
236+
{
237+
checked
238+
{
239+
ICriterion before = Restrictions.Eq("Gender", PersonGender.Female);
240+
ICriterion after = ExpressionProcessor.ProcessExpression<Person>(p => p.Gender == PersonGender.Female);
241+
Assert.AreEqual(before.ToString(), after.ToString());
242+
}
243+
}
244+
245+
[Test]
246+
public void TestUnaryConversionUnchecked()
247+
{
248+
unchecked
249+
{
250+
ICriterion before = Restrictions.Eq("Gender", PersonGender.Female);
251+
ICriterion after = ExpressionProcessor.ProcessExpression<Person>(p => p.Gender == PersonGender.Female);
252+
Assert.AreEqual(before.ToString(), after.ToString());
253+
}
254+
}
255+
234256
[Test]
235257
public void TestEvaluateSubclass()
236258
{

src/NHibernate/Impl/ExpressionProcessor.cs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public static IProjection FindMemberProjection(Expression expression)
170170
{
171171
UnaryExpression unaryExpression = (UnaryExpression)expression;
172172

173-
if (unaryExpression.NodeType != ExpressionType.Convert)
173+
if (!IsConversion(unaryExpression.NodeType))
174174
throw new Exception("Cannot interpret member from " + expression.ToString());
175175

176176
return FindMemberProjection(unaryExpression.Operand);
@@ -212,7 +212,7 @@ public static string FindMemberExpression(Expression expression)
212212

213213
return FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name;
214214
}
215-
else if (memberExpression.Expression.NodeType == ExpressionType.Convert)
215+
else if (IsConversion(memberExpression.Expression.NodeType))
216216
{
217217
return (FindMemberExpression(memberExpression.Expression) + "." + memberExpression.Member.Name).TrimStart('.');
218218
}
@@ -226,7 +226,7 @@ public static string FindMemberExpression(Expression expression)
226226
{
227227
UnaryExpression unaryExpression = (UnaryExpression)expression;
228228

229-
if (unaryExpression.NodeType != ExpressionType.Convert)
229+
if (!IsConversion(unaryExpression.NodeType))
230230
throw new Exception("Cannot interpret member from " + expression.ToString());
231231

232232
return FindMemberExpression(unaryExpression.Operand);
@@ -302,7 +302,7 @@ private static System.Type FindMemberType(Expression expression)
302302
{
303303
UnaryExpression unaryExpression = (UnaryExpression)expression;
304304

305-
if (unaryExpression.NodeType != ExpressionType.Convert)
305+
if (!IsConversion(unaryExpression.NodeType))
306306
throw new Exception("Cannot interpret member from " + expression.ToString());
307307

308308
return FindMemberType(unaryExpression.Operand);
@@ -340,7 +340,7 @@ private static bool IsMemberExpression(Expression expression)
340340
{
341341
UnaryExpression unaryExpression = (UnaryExpression)expression;
342342

343-
if (unaryExpression.NodeType != ExpressionType.Convert)
343+
if (!IsConversion(unaryExpression.NodeType))
344344
throw new Exception("Cannot interpret member from " + expression.ToString());
345345

346346
return IsMemberExpression(unaryExpression.Operand);
@@ -375,6 +375,11 @@ private static bool IsMemberExpression(Expression expression)
375375
return false;
376376
}
377377

378+
private static bool IsConversion(ExpressionType expressionType)
379+
{
380+
return (expressionType == ExpressionType.Convert || expressionType == ExpressionType.ConvertChecked);
381+
}
382+
378383
private static object ConvertType(object value, System.Type type)
379384
{
380385
if (value == null)

0 commit comments

Comments
 (0)