From: <ric...@us...> - 2009-09-30 10:29:49
|
Revision: 4733 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4733&view=rev Author: ricbrown Date: 2009-09-30 10:29:35 +0000 (Wed, 30 Sep 2009) Log Message: ----------- Added arbitrary ICriterion to IQueryOver (allows protected properties, and eventual lambda-expression overloads for criterion). Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs trunk/nhibernate/src/NHibernate/IQueryOver.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-09-30 09:40:08 UTC (rev 4732) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-09-30 10:29:35 UTC (rev 4733) @@ -52,6 +52,11 @@ return Add(expression); } + public QueryOver<T> And(ICriterion expression) + { + return Add(expression); + } + public QueryOver<T> Where(Expression<Func<T, bool>> expression) { return Add(expression); @@ -62,6 +67,11 @@ return Add(expression); } + public QueryOver<T> Where(ICriterion expression) + { + return Add(expression); + } + public QueryOver<T> Select(params Expression<Func<T, object>>[] projections) { List<IProjection> projectionList = new List<IProjection>(); @@ -275,7 +285,13 @@ return this; } + private QueryOver<T> Add(ICriterion expression) + { + _criteria.Add(expression); + return this; + } + ICriteria IQueryOver<T>.UnderlyingCriteria { get { return UnderlyingCriteria; } } @@ -285,12 +301,18 @@ IQueryOver<T> IQueryOver<T>.And(Expression<Func<bool>> expression) { return And(expression); } + IQueryOver<T> IQueryOver<T>.And(ICriterion expression) + { return And(expression); } + IQueryOver<T> IQueryOver<T>.Where(Expression<Func<T, bool>> expression) { return Where(expression); } IQueryOver<T> IQueryOver<T>.Where(Expression<Func<bool>> expression) { return Where(expression); } + IQueryOver<T> IQueryOver<T>.Where(ICriterion expression) + { return Where(expression); } + IQueryOver<T> IQueryOver<T>.Select(params Expression<Func<T, object>>[] projections) { return Select(projections); } Modified: trunk/nhibernate/src/NHibernate/IQueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-09-30 09:40:08 UTC (rev 4732) +++ trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-09-30 10:29:35 UTC (rev 4733) @@ -44,6 +44,11 @@ IQueryOver<T> And(Expression<Func<bool>> expression); /// <summary> + /// Add arbitrary ICriterion (e.g., to allow protected member access) + /// </summary> + IQueryOver<T> And(ICriterion expression); + + /// <summary> /// Identical semantics to Add() to allow more readable queries /// </summary> /// <param name="expression">Lambda expression</param> @@ -58,6 +63,11 @@ IQueryOver<T> Where(Expression<Func<bool>> expression); /// <summary> + /// Add arbitrary ICriterion (e.g., to allow protected member access) + /// </summary> + IQueryOver<T> Where(ICriterion expression); + + /// <summary> /// Add projection expressed as a lambda expression /// </summary> /// <param name="projections">Lambda expressions</param> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-09-30 09:40:08 UTC (rev 4732) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-09-30 10:29:35 UTC (rev 4733) @@ -118,6 +118,22 @@ } [Test] + public void PrivateProperties() + { + ICriteria expected = + CreateTestCriteria(typeof(Person)) + .Add(Restrictions.Eq("Name", "test name")) + .Add(Restrictions.Not(Restrictions.Eq("Name", "not test name"))); + + IQueryOver<Person> actual = + CreateTestQueryOver<Person>() + .Where(Restrictions.Eq("Name", "test name")) + .And(Restrictions.Not(Restrictions.Eq("Name", "not test name"))); + + AssertCriteriaAreEqual(expected, actual); + } + + [Test] public void SimpleCriterion_AliasReferenceSyntax() { ICriteria expected = This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |