@@ -13,7 +13,8 @@ namespace NHibernate.Linq
13
13
{
14
14
public interface INhQueryProvider : IQueryProvider
15
15
{
16
- object ExecuteFuture ( Expression expression ) ;
16
+ IEnumerable < TResult > ExecuteFuture < TResult > ( Expression expression ) ;
17
+ IFutureValue < TResult > ExecuteFutureValue < TResult > ( Expression expression ) ;
17
18
void SetResultTransformerAndAdditionalCriteria ( IQuery query , NhLinqExpression nhExpression , IDictionary < string , Tuple < object , IType > > parameters ) ;
18
19
}
19
20
@@ -59,12 +60,32 @@ public virtual IQueryable<T> CreateQuery<T>(Expression expression)
59
60
return new NhQueryable < T > ( this , expression ) ;
60
61
}
61
62
62
- public virtual object ExecuteFuture ( Expression expression )
63
+ public virtual IEnumerable < TResult > ExecuteFuture < TResult > ( Expression expression )
63
64
{
64
- IQuery query ;
65
- NhLinqExpression nhQuery ;
66
- NhLinqExpression nhLinqExpression = PrepareQuery ( expression , out query , out nhQuery ) ;
67
- return ExecuteFutureQuery ( nhLinqExpression , query , nhQuery ) ;
65
+ PrepareQuery ( expression , out var query , out var nhQuery ) ;
66
+
67
+ var result = query . Future < TResult > ( ) ;
68
+ SetupFutureResult ( nhQuery , ( IDelayedValue ) result ) ;
69
+
70
+ return result ;
71
+ }
72
+
73
+ public virtual IFutureValue < TResult > ExecuteFutureValue < TResult > ( Expression expression )
74
+ {
75
+ PrepareQuery ( expression , out var query , out var nhQuery ) ;
76
+
77
+ var result = query . FutureValue < TResult > ( ) ;
78
+ SetupFutureResult ( nhQuery , ( IDelayedValue ) result ) ;
79
+
80
+ return result ;
81
+ }
82
+
83
+ private static void SetupFutureResult ( NhLinqExpression nhQuery , IDelayedValue result )
84
+ {
85
+ if ( nhQuery . ExpressionToHqlTranslationResults . PostExecuteTransformer == null )
86
+ return ;
87
+
88
+ result . ExecuteOnEval = nhQuery . ExpressionToHqlTranslationResults . PostExecuteTransformer ;
68
89
}
69
90
70
91
protected virtual NhLinqExpression PrepareQuery ( Expression expression , out IQuery query , out NhLinqExpression nhQuery )
@@ -80,24 +101,6 @@ protected virtual NhLinqExpression PrepareQuery(Expression expression, out IQuer
80
101
return nhLinqExpression ;
81
102
}
82
103
83
- private static readonly MethodInfo Future = ReflectHelper . GetMethodDefinition < IQuery > ( q => q . Future < object > ( ) ) ;
84
- private static readonly MethodInfo FutureValue = ReflectHelper . GetMethodDefinition < IQuery > ( q => q . FutureValue < object > ( ) ) ;
85
-
86
- protected virtual object ExecuteFutureQuery ( NhLinqExpression nhLinqExpression , IQuery query , NhLinqExpression nhQuery )
87
- {
88
- var method = ( nhLinqExpression . ReturnType == NhLinqExpressionReturnType . Sequence ? Future : FutureValue )
89
- . MakeGenericMethod ( nhQuery . Type ) ;
90
-
91
- object result = method . Invoke ( query , new object [ 0 ] ) ;
92
-
93
- if ( nhQuery . ExpressionToHqlTranslationResults . PostExecuteTransformer != null )
94
- {
95
- ( ( IDelayedValue ) result ) . ExecuteOnEval = nhQuery . ExpressionToHqlTranslationResults . PostExecuteTransformer ;
96
- }
97
-
98
- return result ;
99
- }
100
-
101
104
protected virtual object ExecuteQuery ( NhLinqExpression nhLinqExpression , IQuery query , NhLinqExpression nhQuery )
102
105
{
103
106
IList results = query . List ( ) ;
0 commit comments