RKP*_*RKP 3 c# sql t-sql sql-server
对于我之前的问题,这是一个后续问题,哪种设计模式适合此工作流程要求?.我想知道什么是在数据库中存储布尔表达式的最佳方法,然后在运行时对其进行评估而不需要太多努力.我有一个要求,即每个月末需要从屏幕上执行一组作业,并且决定是否可以执行作业取决于先前作业的结果.所以我应该能够在数据库中保存一个像E =(A或B)和(C或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"并在叶节点处停止.我使用虚拟Job Ids"1"表示成功,使用"0"表示失败.如果叶节点为零,则允许作业运行.我不确定如何在T-sql中评估这个问题.我可能不得不使用递归函数.
要使用的技术:ASP.NET 3.5,C#3.0,SQL Server 2008
您可以将表达式作为字符串存储在数据库中,然后使用一组自定义函数或现有引擎在运行时解析它们.为实现这一点,我在以前的项目中使用了以下内容:
我会说Dynamic Linq更容易实现,因为你可以使用熟悉的Linq/C#语法构造一个where子句并在数据库中存储为字符串.我在项目中使用了FLEE,我想构建自己的简单查询语言,但是很多这些我现在可以通过使用Dynamic Linq来实现.