Exemplo n.º 1
0
        /// <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()));
        }