From: <ric...@us...> - 2009-07-27 09:42:23
|
Revision: 4661 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4661&view=rev Author: ricbrown Date: 2009-07-27 09:42:13 +0000 (Mon, 27 Jul 2009) Log Message: ----------- Added syntax for IQueryOver.Select(...) 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-07-26 17:02:35 UTC (rev 4660) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-07-27 09:42:13 UTC (rev 4661) @@ -62,6 +62,22 @@ return Add(expression); } + public QueryOver<T> Select(Expression<Func<object>>[] projections) + { + foreach (var projection in projections) + Select(projection); + + return this; + } + + public QueryOver<T> Select(Expression<Func<T, object>>[] projections) + { + foreach (var projection in projections) + Select(projection); + + return this; + } + public QueryOver<T> OrderBy(Expression<Func<T, object>> path, Func<string, Order> orderDelegate) { return AddOrder(path, orderDelegate); @@ -214,6 +230,16 @@ return this; } + private void Select(Expression<Func<T, object>> projection) + { + _criteria.SetProjection(Projections.Property(ExpressionProcessor.FindMemberExpression(projection.Body))); + } + + private void Select(Expression<Func<object>> projection) + { + _criteria.SetProjection(Projections.Property(ExpressionProcessor.FindMemberExpression(projection.Body))); + } + private QueryOver<T> AddOrder(Expression<Func<T, object>> path, Func<string, Order> orderDelegate) { _criteria.AddOrder(ExpressionProcessor.ProcessOrder<T>(path, orderDelegate)); @@ -239,6 +265,12 @@ IQueryOver<T> IQueryOver<T>.Where(Expression<Func<bool>> expression) { return Where(expression); } + IQueryOver<T> IQueryOver<T>.Select(params Expression<Func<T, object>>[] projections) + { return Select(projections); } + + IQueryOver<T> IQueryOver<T>.Select(params Expression<Func<object>>[] projections) + { return Select(projections); } + IQueryOver<T> IQueryOver<T>.OrderBy(Expression<Func<T, object>> path, Func<string, Order> orderDelegate) { return OrderBy(path, orderDelegate); } @@ -293,6 +325,9 @@ IQueryOverJoinBuilder<T> IQueryOver<T>.Full { get { return new IQueryOverJoinBuilder<T>(this, JoinType.FullJoin); } } + IList<T> IQueryOver<T>.List() + { return List(); } + } } Modified: trunk/nhibernate/src/NHibernate/IQueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-07-26 17:02:35 UTC (rev 4660) +++ trunk/nhibernate/src/NHibernate/IQueryOver.cs 2009-07-27 09:42:13 UTC (rev 4661) @@ -53,6 +53,20 @@ IQueryOver<T> Where(Expression<Func<bool>> expression); /// <summary> + /// Add projection expressed as a lambda expression + /// </summary> + /// <param name="projections">Lambda expressions</param> + /// <returns>criteria instance</returns> + IQueryOver<T> Select(params Expression<Func<T, object>>[] projections); + + /// <summary> + /// Add projection expressed as a lambda expression + /// </summary> + /// <param name="projections">Lambda expressions</param> + /// <returns>criteria instance</returns> + IQueryOver<T> Select(params Expression<Func<object>>[] projections); + + /// <summary> /// Add order expressed as a lambda expression /// </summary> /// <param name="path">Lambda expression</param> Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-07-26 17:02:35 UTC (rev 4660) +++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs 2009-07-27 09:42:13 UTC (rev 4661) @@ -259,6 +259,27 @@ AssertCriteriaAreEqual(expected, actual); } + [Test] + public void Project() + { + ICriteria expected = + CreateTestCriteria(typeof(Person), "personAlias") + .SetProjection(Projections.Property("Name")) + .SetProjection(Projections.Property("Age")) + .SetProjection(Projections.Property("personAlias.Gender")) + .SetProjection(Projections.Property("personAlias.HasCar")); + + Person personAlias = null; + IQueryOver<Person> actual = + CreateTestQueryOver<Person>(() => personAlias) + .Select(p => p.Name, + p => p.Age) + .Select(() => personAlias.Gender, + () => personAlias.HasCar); + + AssertCriteriaAreEqual(expected, actual); + } + } } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |