【发布时间】:2010-08-24 09:24:22
【问题描述】:
我想在数据库中存储一个布尔表达式,并对其进行评估。不需要存储完整的表达式树,一个字符串就可以了。
我设想了一个这样的方案:Criteria (expression_to_evaluate, value_to_return)
例如,假设我有一个匹配年龄在 20 到 40 岁之间的人的表达式:
(var >= 20 AND var <= 40)
var 必须替换为相关人员的年龄,如果匹配,则应返回该行。如果不匹配,则应考虑下一行,评估该表达式,依此类推。
可以有更复杂的表达式,例如:
((var >= 20 AND var <= 40) OR (var < 10))
甚至可能有两个变量:
((var1 <= 10) AND (var2 >= 10 OR var1 == 20))
这应该在 SQL (SQL Server 2005/2008) 或 C# 中完成。匹配行的值,应返回并在 C# 中进一步处理。
这可能吗?
【问题讨论】:
-
CAUTION: SQL Injection Attach !!,你也应该在存储之前验证你的表达式,因为 Sql 也会执行任何有害的东西而不会给你任何警告。
-
我已经想到了,所以需要进行某种验证。但是感谢您指出这一点。
标签: c# sql expression expression-trees evaluation