public class FlightQueryTranslator : ExpressionVisitor {
FlightQueryParameters queryParameters;

internal FlightQueryTranslator() {}
internal FlightQueryParameters Translate(Expression expression) {
this.queryParameters = new FlightQueryParameters();
this.Visit(expression);
return this.queryParameters;
}

// specializace ze tdy ExpressionVisitor 
protected override Expression VisitMethodCall(MethodCallExpression m);
protected override Expression VisitUnary(UnaryExpression u);
protected override Expression VisitBinary(BinaryExpression b);
protected override Expression VisitConstant(ConstantExpression c);
protected override Expression VisitMemberAccess(MemberExpression m);

// pomocn metody
private void TranslateStandardComparisons(
ExpressionType nodeType,
ConstantExpression constant,
MemberExpression memberAccess);

private void TranslateAirportInformationComparison(
ConstantExpression constant,
MemberExpression memberAccess);

private void TranslateTimeSpanComparison(
ExpressionType nodeType,
ConstantExpression constant,
MemberExpression memberAccess);

private static Expression StripQuotes(Expression e);
internal static void SetIntParameter(
int limit,
ref int MinValue, ref int MaxValue,
ExpressionType comparison);

internal static int GetIntConstant(ConstantExpression constant);
internal static double GetDoubleConstant(ConstantExpression constant);
}
