2017-02-20 126 views
-2

我有这样 ID描述表名表述表表达评估

1 a+b 
2 SQRT(a)*c 
3 a/b+3 
4 a*a 

也被命名的DataEntry像

time a b c 
9.15 2 5 0 
9.30 1 0 7 

另一个表所以现在我想评估从表情表表达式和从表中的DataEntry表达变量,也请注意,我有一些特殊的功能,这是一个DLL可以我也用商店。

如果有人建议在MySQL存储过程evalute这一点,但我的限制是其在DLL refrenced一些特殊的功能,所以只有在C#中evalute。

+2

你必须给我们的东西,你已经尝试过?你有一个应用程序层(例如Java)吗?这将是一个更合适的地方进行这种评估?你有什么样的DLL? CLR程序集或其他东西? – Alexei

+0

实际上它š转换为DLL,这样的函数库,其中将参数传递给功能,并返回结果的VBA。 –

+0

您是否有一个从MySql使用数据的前端应用程序? – Alexei

回答

0

您当然可以从中创建System.Linq.Expressions,但由于您指定的格式不是必须以“本机”表达式格式,并且您提到您在外部库中引用了方法,所以更简单的方法可能是使用Roslyn并生成/在运行中运行该代码(有关详细信息,请参阅http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.CSharp/Compilation/CSharpCompilation.cs或者搜索SO)。这种方法的优点是,您可以使用大部分表达式,而无需转换它们。

using static System.Math; 
var a = 2; // taken from db dataentry table 
var c = 7; // taken from db dataentry table 

// statement taken from db expression table 
// Sqrt(a)*c 
var result = Sqrt(a)*c; 

这里的好处是,您的表达式不会绑定到C#语言(即使您编译它们的主代码是C#)。

如果你仍然要创建LINQ表达式,你可以通过创建你这样的表情这样做:

using static System.Math; 
var a = 2; // taken from db dataentry table 
var c = 7; // taken from db dataentry table 

// statement taken from db expression table 
// Sqrt(a)*c 
Expression<Func<double, double, double>> expression = (a, c) => Sqrt(a)*c; 
var result = expression.Compile().Invoke(a, c); 

注意:如果你有更简单的语句,而前者,你可以评估更多的后者只能复杂的逻辑与分支等

如果这不是你真正想知道的,你可以请重新表述您的问题,并提供更多的细节?