|
From: <Ric...@us...> - 2009-06-29 18:52:41
|
Revision: 4543
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4543&view=rev
Author: RicBrown
Date: 2009-06-29 18:52:24 +0000 (Mon, 29 Jun 2009)
Log Message:
-----------
Added first cut of Join() to ICriteria<T>.
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate/ICriteriaOfT.cs
trunk/nhibernate/src/NHibernate/Impl/CriteriaOfTImpl.cs
trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/CriteriaOfTFixture.cs
Modified: trunk/nhibernate/src/NHibernate/ICriteriaOfT.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/ICriteriaOfT.cs 2009-06-29 18:10:53 UTC (rev 4542)
+++ trunk/nhibernate/src/NHibernate/ICriteriaOfT.cs 2009-06-29 18:52:24 UTC (rev 4543)
@@ -53,23 +53,31 @@
/// Creates a new NHibernate.ICriteria<T>, "rooted" at the associated entity
/// </summary>
/// <typeparam name="U">Type of sub-criteria</typeparam>
- /// <param name="expression">Lambda expression returning association path</param>
+ /// <param name="path">Lambda expression returning association path</param>
/// <returns>The created "sub criteria"</returns>
- ICriteria<U> Join<U>(Expression<Func<T, U>> expression);
+ ICriteria<U> JoinWalk<U>(Expression<Func<T, U>> path);
/// <summary>
/// Creates a new NHibernate.ICriteria<T>, "rooted" at the associated entity
/// specifying a collection for the join.
/// </summary>
/// <typeparam name="U">Type of sub-criteria (type of the collection)</typeparam>
- /// <param name="expression">Lambda expression returning association path</param>
+ /// <param name="path">Lambda expression returning association path</param>
/// <returns>The created "sub criteria"</returns>
- ICriteria<U> Join<U>(Expression<Func<T, IEnumerable<U>>> expression);
+ ICriteria<U> JoinWalk<U>(Expression<Func<T, IEnumerable<U>>> path);
/// <summary>
+ /// Join an association, assigning an alias to the joined entity
+ /// </summary>
+ /// <param name="path">Lambda expression returning association path</param>
+ /// <param name="alias">Lambda expression returning alias reference</param>
+ /// <returns>criteria instance</returns>
+ ICriteria<T> Join(Expression<Func<T, object>> path, Expression<Func<object>> alias);
+
+ /// <summary>
/// Get the results of the root type and fill the <see cref="IList<T>"/>
/// </summary>
- /// <param name="results">The list filled with the results.</param>
+ /// <returns>The list filled with the results.</returns>
IList<T> List();
}
Modified: trunk/nhibernate/src/NHibernate/Impl/CriteriaOfTImpl.cs
===================================================================
--- trunk/nhibernate/src/NHibernate/Impl/CriteriaOfTImpl.cs 2009-06-29 18:10:53 UTC (rev 4542)
+++ trunk/nhibernate/src/NHibernate/Impl/CriteriaOfTImpl.cs 2009-06-29 18:52:24 UTC (rev 4543)
@@ -2,6 +2,7 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
+using NHibernate.SqlCommand;
namespace NHibernate.Impl
{
@@ -45,25 +46,39 @@
return Add(expression);
}
- ICriteria<U> ICriteria<T>.Join<U>(Expression<Func<T, U>> expression)
+ ICriteria<U> ICriteria<T>.JoinWalk<U>(Expression<Func<T, U>> path)
{
return new CriteriaImpl<U>(
_criteria.CreateCriteria(
- ExpressionProcessor.FindMemberExpression(expression.Body)));
+ ExpressionProcessor.FindMemberExpression(path.Body)));
}
- ICriteria<U> ICriteria<T>.Join<U>(Expression<Func<T, IEnumerable<U>>> expression)
+ ICriteria<U> ICriteria<T>.JoinWalk<U>(Expression<Func<T, IEnumerable<U>>> path)
{
return new CriteriaImpl<U>(
_criteria.CreateCriteria(
- ExpressionProcessor.FindMemberExpression(expression.Body)));
+ ExpressionProcessor.FindMemberExpression(path.Body)));
}
+ ICriteria<T> ICriteria<T>.Join(Expression<Func<T, object>> path, Expression<Func<object>> alias)
+ {
+ return AddAlias(
+ ExpressionProcessor.FindMemberExpression(path.Body),
+ ExpressionProcessor.FindMemberExpression(alias.Body),
+ JoinType.InnerJoin);
+ }
+
IList<T> ICriteria<T>.List()
{
return _criteria.List<T>();
}
+ private CriteriaImpl<T> AddAlias(string path, string alias, JoinType joinType)
+ {
+ _criteria.CreateAlias(path, alias, joinType);
+ return this;
+ }
+
private CriteriaImpl<T> Add(Expression<Func<T, bool>> expression)
{
_criteria.Add(ExpressionProcessor.ProcessExpression<T>(expression));
Modified: trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/CriteriaOfTFixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/CriteriaOfTFixture.cs 2009-06-29 18:10:53 UTC (rev 4542)
+++ trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/CriteriaOfTFixture.cs 2009-06-29 18:52:24 UTC (rev 4543)
@@ -62,7 +62,7 @@
}
[Test]
- public void SubCriteria_Join_ToOne()
+ public void SubCriteria_JoinWalk_ToOne()
{
ICriteria expected =
CreateTestCriteria(typeof(Person))
@@ -71,14 +71,14 @@
ICriteria<Person> actual =
CreateTestQueryOver<Person>()
- .Join(p => p.Father) // sub-criteria
+ .JoinWalk(p => p.Father) // sub-criteria
.Where(f => f.Name == "test name");
AssertCriteriaAreEqual(expected, actual);
}
[Test]
- public void SubCriteria_Join_ToMany()
+ public void SubCriteria_JoinWalk_ToMany()
{
ICriteria expected =
CreateTestCriteria(typeof(Person))
@@ -87,12 +87,30 @@
ICriteria<Child> actual =
CreateTestQueryOver<Person>()
- .Join<Child>(p => p.Children) // sub-criteria
+ .JoinWalk<Child>(p => p.Children) // sub-criteria
.Where(c => c.Nickname == "test name");
AssertCriteriaAreEqual(expected, actual);
}
+ [Test]
+ public void Alias_Join()
+ {
+ ICriteria expected =
+ CreateTestCriteria(typeof(Person))
+ .CreateAlias("Father", "fatherAlias")
+ .CreateAlias("Children", "childAlias");
+
+ Person fatherAlias = null;
+ Child childAlias = null;
+ ICriteria<Person> actual =
+ CreateTestQueryOver<Person>()
+ .Join(p => p.Father, () => fatherAlias)
+ .Join(p => p.Children, () => childAlias);
+
+ 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.
|