public string BuildExpression(Dictionary <string, Expression> selectExpressions) { var anonymousTypeCreateExpression = new AnonymousTypeCreateExpression(); var crrv = new ChangeRootReferenceVisitor(FromIdentifier); foreach (var curExpr in selectExpressions.OrderBy(x => x.Key)) { curExpr.Value.AcceptVisitor(crrv); anonymousTypeCreateExpression.Initializers.Add( new AssignmentExpression(new IdentifierExpression(curExpr.Key), curExpr.Value.Clone())); } if (FromExpression == null) { FromExpression = new IdentifierExpression(); } var queryExpr = new QueryExpression { Clauses = { new QueryFromClause { Identifier = "doc", Expression = FromExpression.Clone() }, new QuerySelectClause { Expression = anonymousTypeCreateExpression.Clone() } } }; FromIdentifier = "doc"; var printer = new StringWriter(); var printerVisitor = new CSharpOutputVisitor(printer, FormattingOptionsFactory.CreateSharpDevelop()); queryExpr.AcceptVisitor(printerVisitor); var format = printer.GetStringBuilder().ToString(); if (format.Substring(0, 3) == "\r\n\t") { format = format.Remove(0, 3); } format = format.Replace("\r\n\t", "\n"); return(format); }
public string BuildExpression(Dictionary<string, Expression> selectExpressions) { var anonymousTypeCreateExpression = new AnonymousTypeCreateExpression(); var crrv = new ChangeRootReferenceVisitor(FromIdentifier); foreach (var curExpr in selectExpressions.OrderBy(x => x.Key)) { curExpr.Value.AcceptVisitor(crrv); anonymousTypeCreateExpression.Initializers.Add( new AssignmentExpression(new IdentifierExpression(curExpr.Key), curExpr.Value.Clone())); } if (FromExpression == null) FromExpression = new IdentifierExpression(); var queryExpr = new QueryExpression { Clauses = { new QueryFromClause { Identifier = "doc", Expression = FromExpression.Clone() }, new QuerySelectClause { Expression = anonymousTypeCreateExpression.Clone() } } }; FromIdentifier = "doc"; var printer = new StringWriter(); var printerVisitor = new CSharpOutputVisitor(printer, FormattingOptionsFactory.CreateSharpDevelop()); queryExpr.AcceptVisitor(printerVisitor); var format = printer.GetStringBuilder().ToString(); if (format.Substring(0, 3) == "\r\n\t") { format = format.Remove(0, 3); } format = format.Replace("\r\n\t", "\n"); return format; }