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. |