From: <ric...@us...> - 2009-11-28 21:09:32
|
Revision: 4868 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4868&view=rev Author: ricbrown Date: 2009-11-28 21:09:24 +0000 (Sat, 28 Nov 2009) Log Message: ----------- Expanded IQueryOver to maintain both the original, and sub-criteria types. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs trunk/nhibernate/src/NHibernate/IQueryOver.cs trunk/nhibernate/src/NHibernate/ISession.cs trunk/nhibernate/src/NHibernate/Impl/SessionImpl.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/IntegrationFixture.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/LambdaFixtureBase.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/Model.cs trunk/nhibernate/src/NHibernate.Test/Criteria/Lambda/QueryOverFixture.cs Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverFetchBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,29 +9,29 @@ namespace NHibernate.Criterion { - public class QueryOverFetchBuilder<T> : QueryOverFetchBuilderBase<QueryOver<T>, T> + public class QueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverFetchBuilder(QueryOver<T> root, Expression<Func<T, object>> path) + public QueryOverFetchBuilder(QueryOver<S,T> root, Expression<Func<S, object>> path) : base(root, path) { } } - public class IQueryOverFetchBuilder<T> : QueryOverFetchBuilderBase<IQueryOver<T>, T> + public class IQueryOverFetchBuilder<S,T> : QueryOverFetchBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverFetchBuilder(IQueryOver<T> root, Expression<Func<T, object>> path) + public IQueryOverFetchBuilder(IQueryOver<S,T> root, Expression<Func<S, object>> path) : base(root, path) { } } - public class QueryOverFetchBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverFetchBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; protected string path; - protected QueryOverFetchBuilderBase(R root, Expression<Func<T, object>> path) + protected QueryOverFetchBuilderBase(R root, Expression<Func<S, object>> path) { this.root = root; this.path = ExpressionProcessor.FindMemberExpression(path.Body); Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverJoinBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -8,100 +8,100 @@ namespace NHibernate.Criterion.Lambda { - - public class QueryOverJoinBuilder<T> : QueryOverJoinBuilderBase<QueryOver<T>, T> + + public class QueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverJoinBuilder(QueryOver<T> root, JoinType joinType) : base(root, joinType) { } + public QueryOverJoinBuilder(QueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class IQueryOverJoinBuilder<T> : QueryOverJoinBuilderBase<IQueryOver<T>, T> + public class IQueryOverJoinBuilder<S,T> : QueryOverJoinBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverJoinBuilder(IQueryOver<T> root, JoinType joinType) : base(root, joinType) { } + public IQueryOverJoinBuilder(IQueryOver<S,T> root, JoinType joinType) : base(root, joinType) { } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return root.JoinQueryOver<U>(path, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } - public IQueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public IQueryOver<S,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return root.JoinQueryOver<U>(path, alias, joinType); } } - public class QueryOverJoinBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverJoinBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverLockBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,23 +9,23 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverLockBuilder<T> : QueryOverLockBuilderBase<QueryOver<T>, T> + public class QueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverLockBuilder(QueryOver<T> root, Expression<Func<object>> alias) + public QueryOverLockBuilder(QueryOver<S,T> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class IQueryOverLockBuilder<T> : QueryOverLockBuilderBase<IQueryOver<T>, T> + public class IQueryOverLockBuilder<S,T> : QueryOverLockBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverLockBuilder(IQueryOver<T> root, Expression<Func<object>> alias) + public IQueryOverLockBuilder(IQueryOver<S,T> root, Expression<Func<object>> alias) : base(root, alias) { } } - public class QueryOverLockBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverLockBuilderBase<R, S, T> where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverOrderBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,29 +9,29 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverOrderBuilder<T> : QueryOverOrderBuilderBase<QueryOver<T>, T> + public class QueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverOrderBuilder(QueryOver<T> root, Expression<Func<T, object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) {} - public QueryOverOrderBuilder(QueryOver<T> root, Expression<Func<object>> path) : base(root, path) + public QueryOverOrderBuilder(QueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) {} } - public class IQueryOverOrderBuilder<T> : QueryOverOrderBuilderBase<IQueryOver<T>, T> + public class IQueryOverOrderBuilder<S,T> : QueryOverOrderBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverOrderBuilder(IQueryOver<T> root, Expression<Func<T, object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<T, object>> path) : base(root, path) {} - public IQueryOverOrderBuilder(IQueryOver<T> root, Expression<Func<object>> path) : base(root, path) + public IQueryOverOrderBuilder(IQueryOver<S,T> root, Expression<Func<object>> path) : base(root, path) {} } - public class QueryOverOrderBuilderBase<R, T> where R : IQueryOver<T> + public class QueryOverOrderBuilderBase<R, S, T> where R : IQueryOver<S, T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,15 +9,15 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverProjectionBuilder<R, T> + public class QueryOverProjectionBuilder<R, S, T> { private R fluentReturn; - private IQueryOver<T> criteria; + private IQueryOver<S,T> criteria; private ProjectionList projectionList; private IProjection lastProjection = null; - public QueryOverProjectionBuilder(R fluentReturn, IQueryOver<T> criteria) + public QueryOverProjectionBuilder(R fluentReturn, IQueryOver<S,T> criteria) { this.fluentReturn = fluentReturn; this.criteria = criteria; @@ -52,7 +52,7 @@ /// <summary> /// Create an alias for the previous projection /// </summary> - public QueryOverProjectionBuilder<R, T> WithAlias(Expression<Func<object>> alias) + public QueryOverProjectionBuilder<R, S, T> WithAlias(Expression<Func<object>> alias) { string aliasContainer = ExpressionProcessor.FindMemberExpression(alias.Body); lastProjection = Projections.Alias(lastProjection, aliasContainer); @@ -62,7 +62,7 @@ /// <summary> /// Select an arbitrary projection /// </summary> - public QueryOverProjectionBuilder<R, T> Select(IProjection projection) + public QueryOverProjectionBuilder<R, S, T> Select(IProjection projection) { PushProjection(projection); return this; @@ -71,7 +71,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectAvg(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<T, object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -80,7 +80,7 @@ /// <summary> /// A property average value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectAvg(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectAvg(Expression<Func<object>> expression) { PushProjection(Projections.Avg(expression)); return this; @@ -89,7 +89,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCount(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<T, object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -98,7 +98,7 @@ /// <summary> /// A property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCount(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCount(Expression<Func<object>> expression) { PushProjection(Projections.Count(expression)); return this; @@ -107,7 +107,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCountDistinct(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<T, object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -116,7 +116,7 @@ /// <summary> /// A distinct property value count /// </summary> - public QueryOverProjectionBuilder<R, T> SelectCountDistinct(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectCountDistinct(Expression<Func<object>> expression) { PushProjection(Projections.CountDistinct(expression)); return this; @@ -125,7 +125,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectGroup(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<T, object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -134,7 +134,7 @@ /// <summary> /// A grouping property value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectGroup(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectGroup(Expression<Func<object>> expression) { PushProjection(Projections.Group(expression)); return this; @@ -143,7 +143,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMax(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<T, object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -152,7 +152,7 @@ /// <summary> /// A property maximum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMax(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMax(Expression<Func<object>> expression) { PushProjection(Projections.Max(expression)); return this; @@ -161,7 +161,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMin(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<T, object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -170,7 +170,7 @@ /// <summary> /// A property minimum value /// </summary> - public QueryOverProjectionBuilder<R, T> SelectMin(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectMin(Expression<Func<object>> expression) { PushProjection(Projections.Min(expression)); return this; @@ -179,7 +179,7 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, T> Select(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<T, object>> expression) { PushProjection(Projections.Property(expression)); return this; @@ -188,13 +188,13 @@ /// <summary> /// A projected property value /// </summary> - public QueryOverProjectionBuilder<R, T> Select(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> Select(Expression<Func<object>> expression) { PushProjection(Projections.Property(expression)); return this; } - public QueryOverProjectionBuilder<R, T> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) + public QueryOverProjectionBuilder<R, S, T> SelectSubQuery<U>(QueryOver<U> detachedQueryOver) { PushProjection(Projections.SubQuery(detachedQueryOver)); return this; @@ -203,7 +203,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, T> SelectSum(Expression<Func<T, object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<T, object>> expression) { PushProjection(Projections.Sum(expression)); return this; @@ -212,7 +212,7 @@ /// <summary> /// A property value sum /// </summary> - public QueryOverProjectionBuilder<R, T> SelectSum(Expression<Func<object>> expression) + public QueryOverProjectionBuilder<R, S, T> SelectSum(Expression<Func<object>> expression) { PushProjection(Projections.Sum(expression)); return this; Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverRestrictionBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -10,24 +10,24 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverRestrictionBuilder<T> : QueryOverRestrictionBuilderBase<QueryOver<T>, T> + public class QueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<QueryOver<S,T>, S, T> { - public QueryOverRestrictionBuilder(QueryOver<T> root, string propertyName) + public QueryOverRestrictionBuilder(QueryOver<S,T> root, string propertyName) : base(root, propertyName) { } } - public class IQueryOverRestrictionBuilder<T> : QueryOverRestrictionBuilderBase<IQueryOver<T>, T> + public class IQueryOverRestrictionBuilder<S,T> : QueryOverRestrictionBuilderBase<IQueryOver<S,T>, S, T> { - public IQueryOverRestrictionBuilder(IQueryOver<T> root, string propertyName) + public IQueryOverRestrictionBuilder(IQueryOver<S,T> root, string propertyName) : base(root, propertyName) { } } - public class QueryOverRestrictionBuilderBase<R, T> - where R : IQueryOver<T> + public class QueryOverRestrictionBuilderBase<R,S,T> + where R : IQueryOver<S,T> { public class LambdaBetweenBuilder { Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,25 +9,25 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryBuilder<T> : QueryOverSubqueryBuilderBase<QueryOver<T>, T, QueryOverSubqueryPropertyBuilder<T>> + public class QueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<QueryOver<S,T>, S, T, QueryOverSubqueryPropertyBuilder<S,T>> { - public QueryOverSubqueryBuilder(QueryOver<T> root) + public QueryOverSubqueryBuilder(QueryOver<S,T> root) : base(root) { } } - public class IQueryOverSubqueryBuilder<T> : QueryOverSubqueryBuilderBase<IQueryOver<T>, T, IQueryOverSubqueryPropertyBuilder<T>> + public class IQueryOverSubqueryBuilder<S,T> : QueryOverSubqueryBuilderBase<IQueryOver<S,T>, S, T, IQueryOverSubqueryPropertyBuilder<S,T>> { - public IQueryOverSubqueryBuilder(IQueryOver<T> root) + public IQueryOverSubqueryBuilder(IQueryOver<S,T> root) : base(root) { } } - public class QueryOverSubqueryBuilderBase<R, T, S> - where R : IQueryOver<T> - where S : QueryOverSubqueryPropertyBuilderBase, new() + public class QueryOverSubqueryBuilderBase<R, S, T, B> + where R : IQueryOver<S,T> + where B : QueryOverSubqueryPropertyBuilderBase, new() { protected R root; @@ -121,21 +121,21 @@ return root; } - public S WhereProperty(Expression<Func<T, object>> expression) + public B WhereProperty(Expression<Func<T, object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (S)new S().Set(root, property, null); + return (B)new B().Set(root, property, null); } - public S WhereProperty(Expression<Func<object>> expression) + public B WhereProperty(Expression<Func<object>> expression) { string property = ExpressionProcessor.FindMemberExpression(expression.Body); - return (S)new S().Set(root, property, null); + return (B)new B().Set(root, property, null); } - public S WhereValue(object value) + public B WhereValue(object value) { - return (S)new S().Set(root, null, value); + return (B)new B().Set(root, null, value); } } Modified: trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/Lambda/QueryOverSubqueryPropertyBuilder.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -9,7 +9,7 @@ namespace NHibernate.Criterion.Lambda { - public class QueryOverSubqueryPropertyBuilder<T> : QueryOverSubqueryPropertyBuilderBase<QueryOver<T>, T> + public class QueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<QueryOver<S,T>, S, T> { public QueryOverSubqueryPropertyBuilder() @@ -17,7 +17,7 @@ } - public class IQueryOverSubqueryPropertyBuilder<T> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<T>, T> + public class IQueryOverSubqueryPropertyBuilder<S,T> : QueryOverSubqueryPropertyBuilderBase<IQueryOver<S,T>, S, T> { public IQueryOverSubqueryPropertyBuilder() @@ -32,8 +32,8 @@ internal abstract QueryOverSubqueryPropertyBuilderBase Set(object root, string path, object value); } - public class QueryOverSubqueryPropertyBuilderBase<R, T> : QueryOverSubqueryPropertyBuilderBase - where R : IQueryOver<T> + public class QueryOverSubqueryPropertyBuilderBase<R, S, T> : QueryOverSubqueryPropertyBuilderBase + where R : IQueryOver<S,T> { protected R root; Modified: trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-28 14:04:43 UTC (rev 4867) +++ trunk/nhibernate/src/NHibernate/Criterion/QueryOver.cs 2009-11-28 21:09:24 UTC (rev 4868) @@ -19,14 +19,14 @@ protected QueryOver() { } - public static QueryOver<T> Of<T>() + public static QueryOver<T,T> Of<T>() { - return new QueryOver<T>(); + return new QueryOver<T,T>(); } - public static QueryOver<T> Of<T>(Expression<Func<T>> alias) + public static QueryOver<T,T> Of<T>(Expression<Func<T>> alias) { - return new QueryOver<T>(alias); + return new QueryOver<T,T>(alias); } public ICriteria UnderlyingCriteria @@ -41,11 +41,105 @@ } + [Serializable] + public class QueryOver<T> : QueryOver, IQueryOver<T> + { + + private IList<T> List() + { + return _criteria.List<T>(); + } + + private IList<U> List<U>() + { + return _criteria.List<U>(); + } + + private T UniqueResult() + { + return _criteria.UniqueResult<T>(); + } + + private U UniqueResult<U>() + { + return _criteria.UniqueResult<U>(); + } + + private IEnumerable<T> Future() + { + return _criteria.Future<T>(); + } + + private IEnumerable<U> Future<U>() + { + return _criteria.Future<U>(); + } + + private IFutureValue<T> FutureValue() + { + return _criteria.FutureValue<T>(); + } + + private IFutureValue<U> FutureValue<U>() + { + return _criteria.FutureValue<U>(); + } + + /// <summary> + /// Get an executable instance of <c>IQueryOver<T></c>, + /// to actually run the query.</summary> + public IQueryOver<T> GetExecutableQueryOver(ISession session) + { + _impl.Session = session.GetSessionImplementation(); + return this; + } + + /// <summary> + /// Method to allow comparison of detached query in Lambda expression + /// e.g., p => p.Name == myQuery.As<string> + /// </summary> + /// <typeparam name="S">type returned by query</typeparam> + /// <returns>throws an exception if evaluated directly at runtime.</returns> + public S As<S>() + { + throw new HibernateException("Incorrect syntax; .As<T> method is for use in Lambda expressions only."); + } + + + ICriteria IQueryOver<T>.UnderlyingCriteria + { get { return UnderlyingCriteria; } } + + IList<T> IQueryOver<T>.List() + { return List(); } + + IList<U> IQueryOver<T>.List<U>() + { return List<U>(); } + + T IQueryOver<T>.UniqueResult() + { return UniqueResult(); } + + U IQueryOver<T>.UniqueResult<U>() + { return UniqueResult<U>(); } + + IEnumerable<T> IQueryOver<T>.Future() + { return Future(); } + + IEnumerable<U> IQueryOver<T>.Future<U>() + { return Future<U>(); } + + IFutureValue<T> IQueryOver<T>.FutureValue() + { return FutureValue(); } + + IFutureValue<U> IQueryOver<T>.FutureValue<U>() + { return FutureValue<U>(); } + + } + /// <summary> /// Implementation of the <see cref="IQueryOver<T>"/> interface /// </summary> [Serializable] - public class QueryOver<T> : QueryOver, IQueryOver<T> + public class QueryOver<R,T> : QueryOver<R>, IQueryOver<R,T> { protected internal QueryOver() @@ -73,88 +167,77 @@ _criteria = criteria; } - /// <summary> - /// Method to allow comparison of detached query in Lambda expression - /// e.g., p => p.Name == myQuery.As<string> - /// </summary> - /// <typeparam name="R">type returned by query</typeparam> - /// <returns>throws an exception if evaluated directly at runtime.</returns> - public R As<R>() + public QueryOver<R,T> And(Expression<Func<T, bool>> expression) { - throw new HibernateException("Incorrect syntax; .As<T> method is for use in Lambda expressions only."); - } - - public QueryOver<T> And(Expression<Func<T, bool>> expression) - { return Add(expression); } - public QueryOver<T> And(Expression<Func<bool>> expression) + public QueryOver<R,T> And(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<T> And(ICriterion expression) + public QueryOver<R,T> And(ICriterion expression) { return Add(expression); } - public QueryOver<T> AndNot(Expression<Func<T, bool>> expression) + public QueryOver<R,T> AndNot(Expression<Func<T, bool>> expression) { return AddNot(expression); } - public QueryOver<T> AndNot(Expression<Func<bool>> expression) + public QueryOver<R,T> AndNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<T> AndRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<T, object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<T> AndRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<R,T> AndRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<T> Where(Expression<Func<T, bool>> expression) + public QueryOver<R,T> Where(Expression<Func<T, bool>> expression) { return Add(expression); } - public QueryOver<T> Where(Expression<Func<bool>> expression) + public QueryOver<R,T> Where(Expression<Func<bool>> expression) { return Add(expression); } - public QueryOver<T> Where(ICriterion expression) + public QueryOver<R,T> Where(ICriterion expression) { return Add(expression); } - public QueryOver<T> WhereNot(Expression<Func<T, bool>> expression) + public QueryOver<R,T> WhereNot(Expression<Func<T, bool>> expression) { return AddNot(expression); } - public QueryOver<T> WhereNot(Expression<Func<bool>> expression) + public QueryOver<R,T> WhereNot(Expression<Func<bool>> expression) { return AddNot(expression); } - public QueryOverRestrictionBuilder<T> WhereRestrictionOn(Expression<Func<T, object>> expression) + public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<T, object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOverRestrictionBuilder<T> WhereRestrictionOn(Expression<Func<object>> expression) + public QueryOverRestrictionBuilder<R,T> WhereRestrictionOn(Expression<Func<object>> expression) { - return new QueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); + return new QueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - public QueryOver<T> Select(params Expression<Func<T, object>>[] projections) + public QueryOver<R,T> Select(params Expression<Func<R, object>>[] projections) { List<IProjection> projectionList = new List<IProjection>(); @@ -165,216 +248,216 @@ return this; } - public QueryOver<T> Select(params IProjection[] projections) + public QueryOver<R,T> Select(params IProjection[] projections) { _criteria.SetProjection(projections); return this; } - QueryOverProjectionBuilder<QueryOver<T>, T> SelectList + QueryOverProjectionBuilder<QueryOver<R,T>, R, T> SelectList { - get { return new QueryOverProjectionBuilder<QueryOver<T>, T>(this, this); } + get { return new QueryOverProjectionBuilder<QueryOver<R,T>, R, T>(this, this); } } - public QueryOverOrderBuilder<T> OrderBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<T, object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> OrderBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<R,T> OrderBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> ThenBy(Expression<Func<T, object>> path) + public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<T, object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOverOrderBuilder<T> ThenBy(Expression<Func<object>> path) + public QueryOverOrderBuilder<R,T> ThenBy(Expression<Func<object>> path) { - return new QueryOverOrderBuilder<T>(this, path); + return new QueryOverOrderBuilder<R,T>(this, path); } - public QueryOver<T> Skip(int firstResult) + public QueryOver<R,T> Skip(int firstResult) { _criteria.SetFirstResult(firstResult); return this; } - public QueryOver<T> Take(int maxResults) + public QueryOver<R,T> Take(int maxResults) { _criteria.SetMaxResults(maxResults); return this; } - public QueryOver<T> Cacheable() + public QueryOver<R,T> Cacheable() { _criteria.SetCacheable(true); return this; } - public QueryOver<T> CacheMode(CacheMode cacheMode) + public QueryOver<R,T> CacheMode(CacheMode cacheMode) { _criteria.SetCacheMode(cacheMode); return this; } - public QueryOver<T> CacheRegion(string cacheRegion) + public QueryOver<R,T> CacheRegion(string cacheRegion) { _criteria.SetCacheRegion(cacheRegion); return this; } - public QueryOverSubqueryBuilder<T> WithSubquery + public QueryOverSubqueryBuilder<R,T> WithSubquery { - get { return new QueryOverSubqueryBuilder<T>(this); } + get { return new QueryOverSubqueryBuilder<R,T>(this); } } - public QueryOverFetchBuilder<T> Fetch(Expression<Func<T, object>> path) + public QueryOverFetchBuilder<R,T> Fetch(Expression<Func<R, object>> path) { - return new QueryOverFetchBuilder<T>(this, path); + return new QueryOverFetchBuilder<R,T>(this, path); } - public QueryOverLockBuilder<T> Lock() + public QueryOverLockBuilder<R,T> Lock() { - return new QueryOverLockBuilder<T>(this, null); + return new QueryOverLockBuilder<R,T>(this, null); } - public QueryOverLockBuilder<T> Lock(Expression<Func<object>> alias) + public QueryOverLockBuilder<R,T> Lock(Expression<Func<object>> alias) { - return new QueryOverLockBuilder<T>(this, alias); + return new QueryOverLockBuilder<R,T>(this, alias); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body))); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), ExpressionProcessor.FindMemberExpression(alias.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) + public QueryOver<R,U> JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) { - return new QueryOver<U>(_impl, + return new QueryOver<R,U>(_impl, _criteria.CreateCriteria( ExpressionProcessor.FindMemberExpression(path.Body), joinType)); } - public QueryOver<T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) + public QueryOver<R,T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -382,7 +465,7 @@ JoinType.InnerJoin); } - public QueryOver<T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) + public QueryOver<R,T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -390,7 +473,7 @@ JoinType.InnerJoin); } - public QueryOver<T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) + public QueryOver<R,T> JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -398,7 +481,7 @@ joinType); } - public QueryOver<T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) + public QueryOver<R,T> JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) { return AddAlias( ExpressionProcessor.FindMemberExpression(path.Body), @@ -406,301 +489,225 @@ joinType); } - public QueryOverJoinBuilder<T> Inner + public QueryOverJoinBuilder<R,T> Inner { - get { return new QueryOverJoinBuilder<T>(this, JoinType.InnerJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.InnerJoin); } } - public QueryOverJoinBuilder<T> Left + public QueryOverJoinBuilder<R,T> Left { - get { return new QueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.LeftOuterJoin); } } - public QueryOverJoinBuilder<T> Right + public QueryOverJoinBuilder<R,T> Right { - get { return new QueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.RightOuterJoin); } } - public QueryOverJoinBuilder<T> Full + public QueryOverJoinBuilder<R,T> Full { - get { return new QueryOverJoinBuilder<T>(this, JoinType.FullJoin); } + get { return new QueryOverJoinBuilder<R,T>(this, JoinType.FullJoin); } } - public IList<T> List() + private QueryOver<R,T> AddAlias(string path, string alias, JoinType joinType) { - return _criteria.List<T>(); - } - - public IList<U> List<U>() - { - return _criteria.List<U>(); - } - - public T UniqueResult() - { - return _criteria.UniqueResult<T>(); - } - - public U UniqueResult<U>() - { - return _criteria.UniqueResult<U>(); - } - - IEnumerable<T> Future() - { - return _criteria.Future<T>(); - } - - IEnumerable<U> Future<U>() - { - return _criteria.Future<U>(); - } - - IFutureValue<T> FutureValue() - { - return _criteria.FutureValue<T>(); - } - - IFutureValue<U> FutureValue<U>() - { - return _criteria.FutureValue<U>(); - } - - /// <summary> - /// Get an executable instance of <c>IQueryOver<T></c>, - /// to actually run the query.</summary> - public IQueryOver<T> GetExecutableQueryOver(ISession session) - { - _impl.Session = session.GetSessionImplementation(); - return this; - } - - private QueryOver<T> AddAlias(string path, string alias, JoinType joinType) - { _criteria.CreateAlias(path, alias, joinType); return this; } - private QueryOver<T> Add(Expression<Func<T, bool>> expression) + private QueryOver<R,T> Add(Expression<Func<T, bool>> expression) { _criteria.Add(ExpressionProcessor.ProcessExpression<T>(expression)); return this; } - private QueryOver<T> Add(Expression<Func<bool>> expression) + private QueryOver<R,T> Add(Expression<Func<bool>> expression) { _criteria.Add(ExpressionProcessor.ProcessExpression(expression)); return this; } - private QueryOver<T> Add(ICriterion expression) + private QueryOver<R,T> Add(ICriterion expression) { _criteria.Add(expression); return this; } - private QueryOver<T> AddNot(Expression<Func<T, bool>> expression) + private QueryOver<R,T> AddNot(Expression<Func<T, bool>> expression) { _criteria.Add(Restrictions.Not(ExpressionProcessor.ProcessExpression<T>(expression))); return this; } - private QueryOver<T> AddNot(Expression<Func<bool>> expression) + private QueryOver<R,T> AddNot(Expression<Func<bool>> expression) { _criteria.Add(Restrictions.Not(ExpressionProcessor.ProcessExpression(expression))); return this; } - ICriteria IQueryOver<T>.UnderlyingCriteria - { get { return UnderlyingCriteria; } } - - IQueryOver<T> IQueryOver<T>.And(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.And(Expression<Func<T, bool>> expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.And(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.And(Expression<Func<bool>> expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.And(ICriterion expression) + IQueryOver<R,T> IQueryOver<R,T>.And(ICriterion expression) { return And(expression); } - IQueryOver<T> IQueryOver<T>.AndNot(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.AndNot(Expression<Func<T, bool>> expression) { return AndNot(expression); } - IQueryOver<T> IQueryOver<T>.AndNot(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.AndNot(Expression<Func<bool>> expression) { return AndNot(expression); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.AndRestrictionOn(Expression<Func<T, object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.AndRestrictionOn(Expression<Func<T, object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.AndRestrictionOn(Expression<Func<object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.AndRestrictionOn(Expression<Func<object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOver<T> IQueryOver<T>.Where(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(Expression<Func<T, bool>> expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.Where(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(Expression<Func<bool>> expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.Where(ICriterion expression) + IQueryOver<R,T> IQueryOver<R,T>.Where(ICriterion expression) { return Where(expression); } - IQueryOver<T> IQueryOver<T>.WhereNot(Expression<Func<T, bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.WhereNot(Expression<Func<T, bool>> expression) { return WhereNot(expression); } - IQueryOver<T> IQueryOver<T>.WhereNot(Expression<Func<bool>> expression) + IQueryOver<R,T> IQueryOver<R,T>.WhereNot(Expression<Func<bool>> expression) { return WhereNot(expression); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.WhereRestrictionOn(Expression<Func<T, object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.WhereRestrictionOn(Expression<Func<T, object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOverRestrictionBuilder<T> IQueryOver<T>.WhereRestrictionOn(Expression<Func<object>> expression) - { return new IQueryOverRestrictionBuilder<T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } + IQueryOverRestrictionBuilder<R,T> IQueryOver<R,T>.WhereRestrictionOn(Expression<Func<object>> expression) + { return new IQueryOverRestrictionBuilder<R,T>(this, ExpressionProcessor.FindMemberExpression(expression.Body)); } - IQueryOver<T> IQueryOver<T>.Select(params Expression<Func<T, object>>[] projections) + IQueryOver<R,T> IQueryOver<R,T>.Select(params Expression<Func<R, object>>[] projections) { return Select(projections); } - IQueryOver<T> IQueryOver<T>.Select(params IProjection[] projections) + IQueryOver<R,T> IQueryOver<R,T>.Select(params IProjection[] projections) { return Select(projections); } - QueryOverProjectionBuilder<IQueryOver<T>, T> IQueryOver<T>.SelectList - { get { return new QueryOverProjectionBuilder<IQueryOver<T>,T>(this, this); } } + QueryOverProjectionBuilder<IQueryOver<R,T>, R, T> IQueryOver<R,T>.SelectList + { get { return new QueryOverProjectionBuilder<IQueryOver<R,T>,R,T>(this, this); } } - IQueryOverOrderBuilder<T> IQueryOver<T>.OrderBy(Expression<Func<T, object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.OrderBy(Expression<Func<T, object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.OrderBy(Expression<Func<object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.OrderBy(Expression<Func<object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.ThenBy(Expression<Func<T, object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.ThenBy(Expression<Func<T, object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOverOrderBuilder<T> IQueryOver<T>.ThenBy(Expression<Func<object>> path) - { return new IQueryOverOrderBuilder<T>(this, path); } + IQueryOverOrderBuilder<R,T> IQueryOver<R,T>.ThenBy(Expression<Func<object>> path) + { return new IQueryOverOrderBuilder<R,T>(this, path); } - IQueryOver<T> IQueryOver<T>.Skip(int firstResult) + IQueryOver<R,T> IQueryOver<R,T>.Skip(int firstResult) { return Skip(firstResult); } - IQueryOver<T> IQueryOver<T>.Take(int maxResults) + IQueryOver<R,T> IQueryOver<R,T>.Take(int maxResults) { return Take(maxResults); } - IQueryOver<T> IQueryOver<T>.Cacheable() + IQueryOver<R,T> IQueryOver<R,T>.Cacheable() { return Cacheable(); } - IQueryOver<T> IQueryOver<T>.CacheMode(CacheMode cacheMode) + IQueryOver<R,T> IQueryOver<R,T>.CacheMode(CacheMode cacheMode) { return CacheMode(cacheMode); } - IQueryOver<T> IQueryOver<T>.CacheRegion(string cacheRegion) + IQueryOver<R,T> IQueryOver<R,T>.CacheRegion(string cacheRegion) { return CacheRegion(cacheRegion); } - IQueryOverSubqueryBuilder<T> IQueryOver<T>.WithSubquery - { get { return new IQueryOverSubqueryBuilder<T>(this); } } + IQueryOverSubqueryBuilder<R,T> IQueryOver<R,T>.WithSubquery + { get { return new IQueryOverSubqueryBuilder<R,T>(this); } } - IQueryOverFetchBuilder<T> IQueryOver<T>.Fetch(Expression<Func<T, object>> path) - { return new IQueryOverFetchBuilder<T>(this, path); } + IQueryOverFetchBuilder<R,T> IQueryOver<R,T>.Fetch(Expression<Func<R, object>> path) + { return new IQueryOverFetchBuilder<R,T>(this, path); } - IQueryOverLockBuilder<T> IQueryOver<T>.Lock() - { return new IQueryOverLockBuilder<T>(this, null); } + IQueryOverLockBuilder<R,T> IQueryOver<R,T>.Lock() + { return new IQueryOverLockBuilder<R,T>(this, null); } - IQueryOverLockBuilder<T> IQueryOver<T>.Lock(Expression<Func<object>> alias) - { return new IQueryOverLockBuilder<T>(this, alias); } + IQueryOverLockBuilder<R,T> IQueryOver<R,T>.Lock(Expression<Func<object>> alias) + { return new IQueryOverLockBuilder<R,T>(this, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, U>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<U>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path) { return JoinQueryOver(path); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias) { return JoinQueryOver(path, alias); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, JoinType joinType) { return JoinQueryOver(path, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<T, IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<U> IQueryOver<T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) + IQueryOver<R,U> IQueryOver<R,T>.JoinQueryOver<U>(Expression<Func<IEnumerable<U>>> path, Expression<Func<U>> alias, JoinType joinType) { return JoinQueryOver(path, alias, joinType); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias) { return JoinAlias(path, alias); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias) { return JoinAlias(path, alias); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<T, object>> path, Expression<Func<object>> alias, JoinType joinType) { return JoinAlias(path, alias, joinType); } - IQueryOver<T> IQueryOver<T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) + IQueryOver<R,T> IQueryOver<R,T>.JoinAlias(Expression<Func<object>> path, Expression<Func<object>> alias, JoinType joinType) { return JoinAlias(path, alias, joinType); } - IQueryOverJoinBuilder<T> IQueryOver<T>.Inner - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.InnerJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Inner + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.InnerJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Left - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.LeftOuterJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Left + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.LeftOuterJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Right - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.RightOuterJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Right + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.RightOuterJoin); } } - IQueryOverJoinBuilder<T> IQueryOver<T>.Full - { get { return new IQueryOverJoinBuilder<T>(this, JoinType.FullJoin); } } + IQueryOverJoinBuilder<R,T> IQueryOver<R,T>.Full + { get { return new IQueryOverJoinBuilder<R,T>(this, JoinType.FullJoin); } } - IList<T> IQueryOver<T>.List() - { return List(); } - - IList<U> IQueryOver<T>.List<U>() - { return List<U>(); } - - T IQueryOver<T>.UniqueResult() - { return UniqueResult(); } - - U IQueryOver<T>.UniqueResult<U>() - { return UniqueResult<U>(); } - - IEnumerable<T> IQueryOver<T... [truncated message content] |