private IQueryBuilderRecord ApplyDirection(IQueryBuilderRecord record)
        {
            var recorder = new QueryBuilderRecorder(record);

            recorder.Add(ctx => ApplyDirection(ctx.CurrentQuery));
            return(recorder.Record);
        }
Example #2
0
 private static void RecordField(QueryBuilderRecorder recorder, FieldInfo field)
 {
     recorder.Add(ctx => {
         ctx.Descend(field.Name);
         ctx.PushDescendigFieldEnumType(field.FieldType.IsEnum ? field.FieldType : null);
     });
 }
        public override void Visit(FieldReferenceExpression node)
        {
            Type descendingEnumType = ResolveDescendingEnumType(node);

            _recorder.Add(
                ctx =>
            {
                ctx.Descend(node.Field.Name);
                ctx.PushDescendigFieldEnumType(descendingEnumType);
            });
        }
        protected void ProcessMemberAccess(MemberExpression m)
        {
            Visit(m.Expression);
            if (IsFieldAccessExpression(m))
            {
                Type descendingEnumType = ResolveDescendingEnumType(m);
                _recorder.Add(
                    ctx =>
                {
                    ctx.Descend(m.Member.Name);
                    ctx.PushDescendigFieldEnumType(descendingEnumType);
                });

                return;
            }

            if (IsPropertyAccessExpression(m))
            {
                AnalyseMethod(_recorder, GetGetMethod(m));
                return;
            }

            CannotOptimize(m);
        }