|
From: <ric...@us...> - 2009-11-19 10:05:25
|
Revision: 4835
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4835&view=rev
Author: ricbrown
Date: 2009-11-19 10:05:05 +0000 (Thu, 19 Nov 2009)
Log Message:
-----------
Added arbitrary ICriterion creation from Lambda expression.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs
Modified: trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs 2009-11-18 15:17:20 UTC (rev 4834)
+++ trunk/nhibernate/src/NHibernate/Criterion/Restrictions.cs 2009-11-19 10:05:05 UTC (rev 4835)
@@ -1,5 +1,8 @@
+using System;
using System.Collections;
using System.Collections.Generic;
+using System.Linq.Expressions;
+using NHibernate.Impl;
namespace NHibernate.Criterion
{
@@ -731,5 +734,29 @@
{
return new NaturalIdentifier();
}
+
+ /// <summary>
+ /// Create an ICriterion for the supplied LambdaExpression
+ /// </summary>
+ /// <typeparam name="T">generic type</typeparam>
+ /// <param name="expression">lambda expression</param>
+ /// <returns>return NHibernate.Criterion.ICriterion</returns>
+ public static ICriterion Where<T>(Expression<Func<T, bool>> expression)
+ {
+ ICriterion criterion = ExpressionProcessor.ProcessExpression<T>(expression);
+ return criterion;
+ }
+
+ /// <summary>
+ /// Create an ICriterion for the supplied LambdaExpression
+ /// </summary>
+ /// <param name="expression">lambda expression</param>
+ /// <returns>return NHibernate.Criterion.ICriterion</returns>
+ public static ICriterion Where(Expression<Func<bool>> expression)
+ {
+ ICriterion criterion = ExpressionProcessor.ProcessExpression(expression);
+ return criterion;
+ }
+
}
}
Added: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/RestrictionsFixture.cs 2009-11-19 10:05:05 UTC (rev 4835)
@@ -0,0 +1,34 @@
+using System;
+using System.Collections;
+
+using NUnit.Framework;
+
+using NHibernate.Criterion;
+
+namespace NHibernate.Test.Criteria.Lambda
+{
+
+ [TestFixture]
+ public class RestrictionsFixture : LambdaFixtureBase
+ {
+
+ [Test]
+ public void ArbitraryCriterion()
+ {
+ ICriteria expected =
+ CreateTestCriteria(typeof(Person), "personAlias")
+ .Add(Restrictions.Lt("Age", 65))
+ .Add(Restrictions.Ge("personAlias.Age", 18));
+
+ Person personAlias = null;
+ var actual =
+ CreateTestQueryOver<Person>(() => personAlias)
+ .Where(Restrictions.Where<Person>(p => p.Age < 65))
+ .And(Restrictions.Where(() => personAlias.Age >= 18));
+
+ AssertCriteriaAreEqual(expected, actual);
+ }
+
+ }
+
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-11-18 15:17:20 UTC (rev 4834)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-11-19 10:05:05 UTC (rev 4835)
@@ -164,6 +164,7 @@
<Compile Include="Criteria\Lambda\IntegrationFixture.cs" />
<Compile Include="Criteria\Lambda\LambdaFixtureBase.cs" />
<Compile Include="Criteria\Lambda\Model.cs" />
+ <Compile Include="Criteria\Lambda\RestrictionsFixture.cs" />
<Compile Include="Criteria\Lambda\SubqueryFixture.cs" />
<Compile Include="Criteria\MaterialResource.cs" />
<Compile Include="Criteria\ProjectionsTest.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|