protected override Expression VisitMethodCall(MethodCallExpression node) { if (node.Method.DeclaringType == typeof(Queryable) && node.Method.Name == "Where") { var predicate = node.Arguments[1]; Visit(predicate); return(node); } switch (node.Method.Name) { case "Contains": _action = TranslatorAction.Contains; break; case "StartsWith": _action = TranslatorAction.StartsWith; break; case "EndsWith": _action = TranslatorAction.EndsWith; break; } return(base.VisitMethodCall(node)); }
protected override Expression VisitConstant(ConstantExpression node) { switch (_action) { case TranslatorAction.Default: _resultStringBuilder.Append($"({node.Value})\""); break; case TranslatorAction.Contains: _resultStringBuilder.Append($"(*{node.Value}*)\""); break; case TranslatorAction.StartsWith: _resultStringBuilder.Append($"({node.Value}*)\""); break; case TranslatorAction.EndsWith: _resultStringBuilder.Append($"(*{node.Value})\""); break; default: throw new NotSupportedException($"Operation '{_action}' is not supported"); } _action = TranslatorAction.Default; return(node); }
public ExpressionToFtsRequestTranslator() { _resultStringBuilder = new StringBuilder(); _action = TranslatorAction.Default; }