private IQueryBuilderRecord ApplyDirection(IQueryBuilderRecord record) { var recorder = new QueryBuilderRecorder(record); recorder.Add(ctx => ApplyDirection(ctx.CurrentQuery)); return(recorder.Record); }
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); }