Skip to content
This repository was archived by the owner on Apr 15, 2025. It is now read-only.

Commit 85b1e67

Browse files
committed
Removing Select allocations.
1 parent 5604723 commit 85b1e67

File tree

1 file changed

+21
-18
lines changed

1 file changed

+21
-18
lines changed

‎DataCore/QueryVisitor.cs

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
1-
using System.Linq;
2-
using System.Linq.Expressions;
1+
using System.Linq.Expressions;
32
using System.Reflection;
43

54
namespace DataCore
65
{
76
public class QueryVisitor : ExpressionVisitor
87
{
9-
public Parameters Parameters { get; }
8+
private readonly Parameters _parameters;
109

1110
public QueryVisitor(Parameters parameters)
1211
{
13-
Parameters = parameters;
12+
_parameters = parameters;
1413
}
1514

1615
protected override Expression VisitMember(MemberExpression memberExpression)
@@ -40,32 +39,36 @@ protected override Expression VisitMember(MemberExpression memberExpression)
4039

4140
protected override Expression VisitNew(NewExpression node)
4241
{
43-
var args = node.Arguments.Select(a => ((ConstantExpression)a).Value).ToArray();
44-
42+
var args = new object[node.Arguments.Count];
43+
for (var i = 0; i < args.Length; i++)
44+
{
45+
args[i] = ((ConstantExpression)node.Arguments[i]).Value;
46+
}
47+
4548
var newObject = node.Constructor.Invoke(args);
4649

4750
return Expression.Constant(newObject);
4851
}
4952

5053
protected override Expression VisitMethodCall(MethodCallExpression node)
5154
{
52-
if (ExpressionHelper.GetSqlExtensionMethodCallConstant(new Translator(), node, Parameters, out _))
55+
if (ExpressionHelper.GetSqlExtensionMethodCallConstant(new Translator(), node, _parameters, out _))
5356
return node;
5457

5558
var obj = ((ConstantExpression) node.Object)?.Value;
56-
var args = node.Arguments.Select(
57-
a =>
58-
{
59-
ConstantExpression constExpr;
59+
60+
var args = new object[node.Arguments.Count];
61+
for (var i = 0; i < args.Length; i++)
62+
{
63+
ConstantExpression constExpr;
6064

61-
if (a is MemberExpression memberExpr)
62-
constExpr = VisitMember(memberExpr) as ConstantExpression;
63-
else
64-
constExpr = a as ConstantExpression;
65+
if (node.Arguments[i] is MemberExpression memberExpr)
66+
constExpr = VisitMember(memberExpr) as ConstantExpression;
67+
else
68+
constExpr = node.Arguments[i] as ConstantExpression;
6569

66-
return constExpr?.Value;
67-
}
68-
).ToArray();
70+
args[i] = constExpr?.Value;
71+
}
6972

7073
var newObject = node.Method.Invoke(obj, args);
7174

0 commit comments

Comments
 (0)