2017-02-20 124 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); 

注意:如果你有更簡單的語句,而前者,你可以評估更多的後者只能複雜的邏輯與分支等

如果這不是你真正想知道的,你可以請重新表述您的問題,並提供更多的細節?