コード例 #1
0
        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);
        }