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