评估存储为字符串的表达式

时间:2010-08-24 09:24:23

标签: c# sql expression expression-trees evaluation

我想在数据库中存储一个布尔表达式,并对其进行评估。没有必要存储完整的表达式树,字符串可能会这样做。

我想象了一个这样的计划: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#中进一步处理。

这甚至可能吗?

2 个答案:

答案 0 :(得分:1)

EXECUTE | EXEC允许您首先构建一个T-SQL字符串,然后执行它。您可以根据变量执行逻辑以首先构建字符串,然后只需EXEC它。

同样,您可以在C#中执行相同操作,并使用ExecuteNonQuery()ExecuteReader()执行T-SQL。

答案 1 :(得分:0)

使用隐藏在Visual Studio代码示例中的System.Linq.Dynamic内容以及普通的linq-to-sql。指定的属性名称将根据生成的实体类进行映射。

myContext.MyTable.Where("Property > 20 && Property < 40").ToList();