在许多方法

时间:2016-08-25 13:48:58

标签: c# stored-procedures wildcard

是否可以直接修改方法的每个参数,而无需在方法中对此进行编码?
我使用storedprocedures作为数据库层,任务是为应用程序提供通配符用法,提供' *'通配符,必须更改为'%' sql通配符

拥有像这样的WildcardAttribute会很棒:

[WildcardAttribute('*', '%')]
[WildcardAttribute('?', '_')]
SearchMethod( s) // -> value of s: *
{
   InvokeSPROC( s) // -> value of s:  %
}

而不是:

  SearchMethod( s) // -> value of s: *
    {
       InvokeSPROC( s.Replace("*", "%").Replace("?", "_")) 
    }

在sproc中修改此修改不是一个选项..

谢谢!

1 个答案:

答案 0 :(得分:2)

当然,你可以使用像PostSharp这样的AOP框架来做到这一点。 https://www.postsharp.net/aop.net

有关示例,请参阅http://doc.postsharp.net/method-decorator。部分访问参数

  

也可以修改方面方法中的参数值。您需要做的就是修改Arguments集合中项目的值。请记住,Arguments集合中的所有项都是对象类型,因此您需要注意更改值的方式。如果您要修改的值最初是字符串,则需要确保它保持字符串类型

.Net有更多的AOP框架,所以你可以阅读它们。

顺便问一下,您的代码InvokeSPROC看起来如何?你不能替换那里的角色吗?

编辑: 如果它太复杂,你可以为它创建一个方法,或者写一个像这样的扩展方法:

public static class StringExtensions
{
    public static string SanitizeForStoredProcedure(this string pattern)
    {
        return pattern.Replace("*", "%").Replace("?", "_");    
    }
}

然后您可以使用

进行调用
SearchMethod( s) // -> value of s: *
{
   InvokeSPROC( s.SanitizeForStoredProcedure() ) // -> value of s:  %
}