我在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并按操作符进行另一次拆分并与任务日期进行比较。
答案 0 :(得分:0)
我想我找到了它。似乎是Martin Konicek在这个链接中解释的方式:
http://coding-time.blogspot.com.uy/2011/07/how-to-implement-rule-engine-in-c.html