private void HandleParamStringFunctions(MethodCallExpression node) { var name = node.Object.As <MemberExpression>().Member.Name; var arg = node.Arguments[0].GetValue(); string value = null; switch (node.Method.Name) { case "StartsWith": value = "{0} like @{1}".ToFormat(_provider.EscapeName(name), Parameters.CurrentIndex); Parameters.RegisterParameter(arg + "%"); break; case "EndsWith": value = "{0} like @{1}".ToFormat(_provider.EscapeName(name), Parameters.CurrentIndex); Parameters.RegisterParameter("%" + arg); break; case "Contains": value = "{0} like @{1}".ToFormat(_provider.EscapeName(name), Parameters.CurrentIndex); Parameters.RegisterParameter("%" + arg + "%"); break; case "ToUpper": case "ToUpperInvariant": value = _provider.ToUpper(name); break; case "ToLower": case "ToLowerInvariant": value = _provider.ToLower(name); break; case "Substring": value = _provider.Substring(name, (int)arg, (int)node.Arguments[1].GetValue()); break; } _sb.Append(value); }