Skip to content

Commit 95809ad

Browse files
authored
Add Projections.Select in Criteria (#2486)
1 parent 53df423 commit 95809ad

File tree

3 files changed

+20
-8
lines changed

3 files changed

+20
-8
lines changed

src/NHibernate/Criterion/Lambda/QueryOverProjectionBuilder.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ public QueryOverProjectionBuilder<T> SelectMin(Expression<Func<object>> expressi
177177
/// </summary>
178178
public QueryOverProjectionBuilder<T> Select(Expression<Func<T, object>> expression)
179179
{
180-
PushProjection(ExpressionProcessor.FindMemberProjection(expression.Body).AsProjection());
180+
PushProjection(Projections.Select(expression));
181181
return this;
182182
}
183183

@@ -186,7 +186,7 @@ public QueryOverProjectionBuilder<T> Select(Expression<Func<T, object>> expressi
186186
/// </summary>
187187
public QueryOverProjectionBuilder<T> Select(Expression<Func<object>> expression)
188188
{
189-
PushProjection(ExpressionProcessor.FindMemberProjection(expression.Body).AsProjection());
189+
PushProjection(Projections.Select(expression));
190190
return this;
191191
}
192192

src/NHibernate/Criterion/Projections.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,22 @@ public static string Concat(params string[] strings)
520520
throw QueryOver.GetDirectUsageException();
521521
}
522522

523+
/// <summary>
524+
/// Projects given lambda expression
525+
/// </summary>
526+
public static IProjection Select(Expression<Func<object>> expression)
527+
{
528+
return ExpressionProcessor.FindMemberProjection(expression.Body).AsProjection();
529+
}
530+
531+
/// <summary>
532+
/// Projects given lambda expression
533+
/// </summary>
534+
public static IProjection Select<TEntity>(Expression<Func<TEntity, object>> expression)
535+
{
536+
return ExpressionProcessor.FindMemberProjection(expression.Body).AsProjection();
537+
}
538+
523539
internal static IProjection ProcessConcat(MethodCallExpression methodCallExpression)
524540
{
525541
NewArrayExpression args = (NewArrayExpression)methodCallExpression.Arguments[0];

src/NHibernate/Criterion/QueryOver.cs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
using NHibernate.Loader;
1010
using NHibernate.SqlCommand;
1111
using NHibernate.Transform;
12+
using NHibernate.Util;
1213

1314
namespace NHibernate.Criterion
1415
{
@@ -404,12 +405,7 @@ public QueryOverRestrictionBuilder<TRoot,TSubType> WhereRestrictionOn(Expression
404405

405406
public QueryOver<TRoot,TSubType> Select(params Expression<Func<TRoot, object>>[] projections)
406407
{
407-
List<IProjection> projectionList = new List<IProjection>();
408-
409-
foreach (var projection in projections)
410-
projectionList.Add(ExpressionProcessor.FindMemberProjection(projection.Body).AsProjection());
411-
412-
criteria.SetProjection(projectionList.ToArray());
408+
criteria.SetProjection(projections.ToArray(x => Projections.Select(x)));
413409
return this;
414410
}
415411

0 commit comments

Comments
 (0)