数据库存储的句子用于检查班级状态

时间:2016-05-04 17:32:42

标签: c# .net

我在C#中继承了一个系统。我在数据库中有很多说明如下:

StartReal.IsEmpty() && EstimatedStart.Date < DateTime.Today.Date 
StartReal.IsEmpty() && EstimatedStart.Date > DateTime.Today.Date 
StartReal.IsEmpty() && EstimatedStart.Date == DateTime.Today.Date

所有字段都属于名为TASKS的类。现在我分解每个句子(通过AND / OR和运算符分割),然后对句子进行分析以获得所需的结果。这导致了非常低的性能。是否还有其他类型的操作可以完成?

编辑:我从数据库中获取了一个列表,每个列表都有RULECODE,DESCRIPTION和EXPRESSION(上面的那些)。 然后我将每个表达式拆分两次:

  private int TaskSituation(TasksBOL pTask, List<SituationRulesBOL> pRules)
  {
     string[] aCommands;
     char[] aSeparators = { '&', '|' };
     char[] aOperators = { '=', '<', '>' };

     int iCode = 0;

     foreach (SituationRulesBOL o in pRules)
     {
        string sExpression = o.Expression;

        if (sExpression.Contains("&&") || sExpression.Contains("||"))
        {
           aCommands = sExpression.Split(aSeparators, System.StringSplitOptions.RemoveEmptyEntries);
        }

        iCode = CheckExpression(pTask, aCommands);
     }

     return iCode;
  }

先前的方法获取句子的每个部分并将其拆分为AND / OR。然后它将任务信息和参数传递给CheckExpression并按操作符进行另一次拆分并与任务日期进行比较。

1 个答案:

答案 0 :(得分:0)

我想我找到了它。似乎是Martin Konicek在这个链接中解释的方式:

http://coding-time.blogspot.com.uy/2011/07/how-to-implement-rule-engine-in-c.html