这是我之前问题的后续问题 which design pattern is suitable for this workflow requirement? .我想知道在数据库中存储 bool 表达式然后在运行时毫不费力地对其进行评估的最佳方法是什么。我有一个要求,每个月末需要从屏幕上执行一组作业,并且是否可以执行作业的决定取决于以前作业的结果。所以我应该能够在数据库中保存一个表达式,比如 E = (A or B) and (C or D) (可以是任何复杂的嵌套表达式)。这意味着如果 A 或 B 成功且 C 或 D 成功,则 E 可以运行。这如何在数据库中表示和解析以及稍后评估条件?
想这样做(还没测试)
如果“工作 E =(A 和 B)或(C 和 D)”。以树形结构存储在表中
JobId DependentJobId SuccessJobId FailureJobId E A B C E C D 0 E D 1 0 E B 1 0
这意味着“如果 A 成功,则检查 B,否则检查 C”,“如果 C 成功,则检查 D”。进程从没有“DependentJobId”的最高节点开始,并在叶节点处停止。我使用虚拟作业 ID“1”表示成功,“0”表示失败。如果叶节点为零,则允许作业运行。不确定如何最好地在 T-sql 中对此进行评估。我可能必须使用递归函数。
使用的技术:ASP.NET 3.5、C#3.0、SQL Server 2008
最佳答案
您可以将表达式作为字符串存储在数据库中,然后在运行时使用一组自定义函数或现有引擎解析它们。为此,我在以前的项目中使用了以下内容:
FLEE (Fast Lightweight Expression Evaluator)
我想说 Dynamic Linq 更容易使用,因为您基本上可以使用熟悉的 Linq/C# 语法构造一个 where 子句,并将其作为字符串存储在数据库中。我在我想构建自己的简单查询语言的项目中使用了 FLEE,但是我现在可能可以通过使用 Dynamic Linq 来实现其中的很多。
关于c# - 在数据库中存储和解析 bool 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4183903/