我们目前有一个基于Excel的系统,用于为声音和照明租赁公司制定规范。
部分内容是excel表中的一个名为“autospec”的列,它由单个库存项目的Excel公式组成(例如,您指定一个扬声器,然后计算autospec
列中的公式您需要的电缆并自动将它们添加到规格中。
10米麦克风电缆可能具有如下公式:
=IF([loudspeakers]>0,[loudspeakers]*2,0)+([mixing desk]*4)
我们现在正转移到一个带有C#前端的合适数据库。
我想要的是能够在表格中存储每个库存项目的autospec
公式,当用户指定项目的前端时,程序应该找到相关的公式,执行它,并根据需要更改规格数量。
底线:我需要执行字符串中包含的代码。
我是以错误的方式来做这件事的吗? 还有更好的方法吗?
答案 0 :(得分:1)
我问过一次类似的问题:How can I evaluate a C# expression dynamically?
您可以使用它来评估这些表达式。这不是一件非常安全的事情,除非你能保证没有人会在你的数据库中添加垃圾(阅读:恶意代码)。
如果你可以将公式分解为“族”,那么公式列中的每个条目都是一组只有不同参数的小(5-10)公式的成员,你可以尝试这样的事情: / p>
[ItemTable]<-[ItemFormulaParameters(param1, param2, param3)]->[FormulaTable(name)]
并有一个工厂方法,用于按名称实例化公式对象。每个这样的公式对象都有一个“calculate(param1,param2,param3)”属性......
答案 1 :(得分:0)
构建您自己的代码interprenter或构建一个'动态规则引擎',创建一些c#规则的二进制表示,可以由您必须编写的“规则引擎”执行。