【问题标题】:How to check dynamic if conditions如何检查动态if条件
【发布时间】:2019-01-11 12:28:53
【问题描述】:

我需要通过我的应用程序检查动态 if 条件。这是我的应用程序的示例代码。

class Program
{
    static void Main(string[] args)
    {
        int newValue = 0;
        Console.WriteLine("Enter NO");
        int x = int.Parse(Console.ReadLine());
        if (10 < x && x < 20)
        {
            newValue = 1;
        }
        else if (20 < x && x < 30)
        {
            newValue = 2;
        }
        else
        {
            newValue = 3;
        }
    }
}

但我需要动态检查这些条件 (20 &lt; x &amp;&amp; x &lt; 30)。我怎样才能做到这一点?我需要通过我的数据库获取这些条件。这意味着我需要将这些条件存储在我的数据库表中。但也有一个问题。如果数据库有20 &lt; x &amp;&amp; x &lt; 3010 &lt; x &amp;&amp; x &lt; 40这两个条件,当x = 25时,这两个条件都会成立。所以我还需要防止将那些无效的、混乱的条件存储在数据库中。请给我一个解决方案来做到这一点。如何通过应用程序检查动态条件以及如何在我的数据库(SQL Server)中正确存储条件

谢谢。

更新:假设将来我需要向系统添加附加条件(也需要更改当前条件),例如:else if (40&lt; x &amp;&amp; x &lt; 60)。如果我将代码硬编码为 belove 代码,我将无法做到这一点。因此我计划将条件存储在数据库中,但我不知道这样做。

【问题讨论】:

  • 您能否提供一个您存储在数据库中的值的示例?
  • 您到底想在数据库中存储什么?我已经读了好几遍了,每次读它的意义都没有。
  • 我建议不要使用这种方法(本质上是执行动态 C# 代码)。你能解释一下你试图解决的问题吗?我感觉可能有比这更简单的解决方案。
  • @SeanLange 先生,我的问题是,如果我需要向系统添加附加条件,如果我硬编码为 belove,我将无法做到这一点。因此我认为将条件存储在数据库中。我不知道,我需要解决它。
  • @jtate 先生,目前我不这样做,因为我不知道这样做

标签: c# sql sql-server if-statement conditional-statements


【解决方案1】:

不完全确定您想要完成什么,但这是我将您的条件存储在 sql 中的方法。首先,我们需要一个表格和一些数据(这应该是您发布的示例)。

create table MyConditions
(
    ConditionID int identity primary key clustered
    , MinValue int
    , MaxValue int
    , Result int
)

insert MyConditions
(
    MinValue
    , MaxValue
    , Result
) values
(10, 20, 1)
, (20, 30, 2)
, (null, 10, 3)
, (30, null, 3)

然后您只需要一个简单的查询来为任何输入值返回正确的映射值。像这样的东西应该工作。这实际上只是对您正在尝试做的事情的猜测,但它确实适用于发布的示例。您可以调整范围并调整

declare @x int = 251 --this represents the user input value

select *
from MyConditions
where @x > isnull(MinValue, @x - 1)
    AND @x <= isnull(MaxValue, @x)

【讨论】:

  • 非常感谢先生,但是假设如果客户添加了(10, 20, 1)(5, 25, 7),那么它就会混淆。因为当 @x = 15 时,这两个条件都为真。所以我需要防止添加无效条件添加 |如果用户需要添加(5, 25, 7) 这个他必须在添加这个条件之前删除(10, 20, 1) 这个(5, 25, 7)
  • 我又在这里在黑暗中拍摄。老实说,整个过程对我来说似乎很不正常,但我不知道你想解决什么。我让你开始了,你必须在这里付出一些努力。
  • 非常抱歉先生,我是 C# 新手,我正在为我的大学项目开发​​一个简单的 Web 应用程序。在我的应用程序管理面板管理员中添加这些条件。但是您的答案真的很棒(现在管理员可以将这些值插入数据库)。但现在问题,我需要添加一些验证以防止插入无效条件。例如(10, 20, 1)(5, 25, 7)。因为当值 = 10-20 时两者都为真
  • 您可以添加一个名为 Priority 的整数列,给每个规则一个优先级,然后按优先级顺序处理规则,直到匹配成功。
  • 或按优先顺序使用前 1 个订单。这比在不需要时循环要好。但老实说,对于一个学校项目,只需完成它。
猜你喜欢
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-24
  • 2023-01-11
相关资源
最近更新 更多