Skip to content

Commit 5958372

Browse files
committed
Fiex include top node
1 parent 62a51d0 commit 5958372

File tree

5 files changed

+43
-18
lines changed

5 files changed

+43
-18
lines changed

src/Linq2GraphQL.Client/GraphBase.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,17 @@ public GraphBase(GraphClient client, string name, OperationType operationType, L
1717

1818
public QueryNode QueryNode { get; }
1919

20+
21+
/// <summary>
22+
/// Include top node
23+
/// </summary>
24+
/// <returns></returns>
25+
public TGraph Include()
26+
{
27+
QueryNode.IncludePrimitive = true;
28+
return (TGraph)(object)this;
29+
}
30+
2031
public TGraph Include<TProperty>(Expression<Func<T, TProperty>> path)
2132
{
2233
Utilities.ParseExpression(path, QueryNode);

src/Linq2GraphQL.Client/Utilities.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ public static void ParseExpression(Expression body, QueryNode parent)
2626
{
2727
var parameterVisitor = new ParameterVisitor(new MemberNode(null, null));
2828
var topNode = parameterVisitor.ParseExpression(body);
29-
var tree = topNode.PrintMemberTree();
30-
29+
3130
topNode.PopulateChildQueryNodes(parent);
3231

3332
}

src/Linq2GraphQL.Client/Visitors/MemberNode.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,8 @@
55

66
namespace Linq2GraphQL.Client.Visitors
77
{
8-
public class MemberNode(MemberInfo memberInfo, List<ArgumentValue> arguments = null, ParameterExpression parameterExpression = null)
8+
internal class MemberNode(MemberInfo memberInfo, List<ArgumentValue> arguments = null, ParameterExpression parameterExpression = null)
99
{
10-
1110
public string ParameterName => parameterExpression?.Name;
1211

1312
public MemberInfo MemberInfo => memberInfo;
@@ -67,15 +66,14 @@ private static List<MemberInfo> GetMembers(Expression expression)
6766
members.Add(memberExpression.Member);
6867
members.AddRange(GetMembers(memberExpression.Expression));
6968
}
70-
69+
7170
return members;
7271
}
7372

7473
public void PopulateChildQueryNodes(QueryNode queryNode)
7574
{
7675
foreach (var child in Children)
7776
{
78-
7977
var childNode = new QueryNode(child.MemberInfo, null, child.Arguments);
8078
childNode.IncludePrimitive = child.Children.Count == 0;
8179
var addedNode = queryNode.AddChildNode(childNode);

src/Linq2GraphQL.Client/Visitors/ParameterVisitor.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Linq2GraphQL.Client.Visitors
99
{
10-
public class ParameterVisitor(MemberNode memberNode) : ExpressionVisitor
10+
internal class ParameterVisitor(MemberNode memberNode) : ExpressionVisitor
1111
{
1212

1313
public MemberNode ParseExpression(Expression expression)
@@ -52,9 +52,7 @@ protected override Expression VisitMethodCall(MethodCallExpression expression)
5252
{
5353
var arg = expression.Arguments[i];
5454
var v = GetArgumentValue(arg);
55-
5655
argumentValues.Add(new ArgumentValue(graphQLArgumentAttribute.GraphQLName, graphQLArgumentAttribute.GraphQLType, GetArgumentValue(arg)));
57-
5856
}
5957
i++;
6058
}
@@ -74,11 +72,9 @@ protected override Expression VisitMethodCall(MethodCallExpression expression)
7472
if (attr != null)
7573
{
7674
var parameter = GetParameterExpression(expression.Arguments[1]);
77-
7875
var child = memberNode.AddMembers(memberExp);
7976
child.SetParameterExpression(parameter);
8077

81-
8278
var visitor = new ParameterVisitor(child);
8379
visitor.ParseExpression(expression.Arguments[1]);
8480
return expression;
@@ -88,6 +84,29 @@ protected override Expression VisitMethodCall(MethodCallExpression expression)
8884
return base.VisitMethodCall(expression);
8985
}
9086

87+
88+
89+
protected override Expression VisitLambda<T>(Expression<T> node)
90+
{
91+
var newExp = node.Body as NewExpression;
92+
return base.VisitLambda(node);
93+
}
94+
95+
//protected override Expression VisitNew(NewExpression node)
96+
//{
97+
98+
// if (memberNode.ParameterName != null && node.Arguments.Any(e=> e.NodeType == ExpressionType.Parameter))
99+
// {
100+
101+
102+
103+
// }
104+
105+
106+
// return base.VisitNew(node);
107+
//}
108+
109+
91110
private static object GetArgumentValue(Expression element)
92111
{
93112
if (element is ConstantExpression)

test/Linq2GraphQL.Tests/QueryProjectionTests.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,21 @@ public async Task Project_SelectMany()
6767

6868
}
6969

70-
70+
7171
[Fact]
72-
public async Task Project_Complex()
72+
public async Task Project_TopLevelAllPrimitive()
7373
{
74-
7574

7675
var query = sampleClient
7776
.Query
7877
.Customers()
79-
.Select(e => new { Customers = e, Orders = e.SelectMany(e=> e.Orders) });
78+
.Include()
79+
.Select(e => new { Customers = e, Orders = e.SelectMany(f => f.Orders) });
8080

8181
var request = await query.GetRequestAsync();
82-
8382
var result = await query.ExecuteAsync();
84-
8583
var t = result.Customers.All(e => e.CustomerId != default);
86-
84+
8785
Assert.True(result.Customers.All(e => e.CustomerId != default));
8886

8987
}

0 commit comments

Comments
 (0)