/// <summary> /// Convert expression to code. /// </summary> /// <param name="expression">Expression.</param> /// <param name="converter">Expression converter.</param> /// <returns>Parts.</returns> public override ICode Convert(MethodCallExpression expression, ExpressionConverter converter) { var name = FromConverterAttribute.GetSubQuery(expression.Arguments[0]); var coreType = expression.Arguments[0].Type.GetGenericArgumentsEx()[0]; var info = ObjectCreateAnalyzer.MakeObjectCreateInfo(coreType); //TODO return(new WithEntriedCode(Line(name.ToCode(), Blanket(info.Members.Select(e => e.Name.ToCode()).ToArray())), new[] { name })); }
static ICode ConvertNormalWith(ExpressionConverter converter, NewArrayExpression arry) { var with = new VCode() { Indent = 1, Separator = "," }; var names = new List <string>(); foreach (var e in arry.Expressions) { var table = converter.ConvertToCode(e); var body = FromConverterAttribute.GetSubQuery(e); names.Add(body); with.Add(Clause(LineSpace(body.ToCode(), "AS".ToCode()), table)); } return(new WithEntriedCode(new VCode("WITH".ToCode(), with), names.ToArray())); }