在SQL表中添加函数/存储过程名称并在c#project中调用它们

时间:2013-12-04 19:06:05

标签: c# sql .net

我有一个项目,我有一个随机生成的4个字符代码表,即ABCD。

该项目是关于限制某些随机生成的代码,如果它们满足某些限制,即包含某些单词(诅咒单词或保留单词)。用户应该能够输入任意数量的限制词,并且应用程序循环遍历我的代码表中的所有代码,如果它们与任何限制相匹配,则将使用限制ID进行标记。

到目前为止,我有3个限制(可能需要超过这3个以上的自定义逻辑)

  1. StartsWith
  2. 的endsWith
  3. 包含
  4. 我的限制表看起来像

    Restriction ID | Restriction Type | Description 
    1              | 1                | HQ
    2              | 3                | BAD
    
    
    Code Table looks like
    ID             | Postcode         | Restriction ID
    1              | ABCD             | NULL
    2              | ABHQ             | 1
    

    我的问题是关于如何在限制类型和如何实现其逻辑方面变得聪明,即。每种限制类型都需要一个不同的方法,用于检查新类型是否应该限制邮政编码。

    所以在我的代码中..

    //Loop through each code
    For each code
    
         //Loop through each restriction 
         For each restriction
         ?? How to implement custom logic for each different restriction type i.e contains / startswith / endwith.
    

    我想我可以做一个switch语句并硬编码方法来调用类型ID,或者我想可能在限制类型表中为Method添加一个列,该列可以使用.net方法调用该类型或者存储过程?

    有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我认为您需要考虑将来可能需要的其他可能的限制类型。如果这3个就足够了,那么你可能会过度复杂化,只是为了适应永远不会使用的灵活性。

例如,如果你坚持这3种限制类型,那么一个简单的解决方案,甚至不使用存储过程,可能是:

-- Select all restricted codes and their restriction type.
SELECT c.ID, c.Postcode, t.RestrictionId
FROM CodeTable c
    INNER JOIN RestrictionTable t 
    ON c.Postcode LIKE 
              CASE t.RestrictionType 
                 WHEN 1 THEN t.Description + '%'
                 WHEN 2 THEN '%' + t.Description
                 WHEN 3 THEN '%' + t.Description + '%'
                 ELSE t.Description 
              END