2017-02-20 61 views
-2

У меня есть таблица выражений имя таблицы, как это выражение идВыражение оценки в C#

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, которую я также могу использовать.

Если кто-то предлагает evalute это в хранимой процедуре mysql, но мое ограничение - это специальная функция, которая переопределяется в dll, поэтому нужно только вычислять в C#.

+2

Вам нужно будет дать нам то, что вы пробовали? У вас есть прикладной уровень (например, на Java)? Было бы более подходящим местом для проведения таких оценок? Какая у вас dll? CLR или что-то еще? – Alexei

+0

Фактически это s vba, преобразованный в dll, такую ​​библиотеку функций, где передаются параметры для работы и возврата результатов. –

+0

У вас есть интерфейсное приложение, которое использует данные из MySql? – Alexei

ответ

0

Вы можете создать из него System.Linq.Expressions, но поскольку формат, который вы указали, не обязательно в формате «родных» выражений плюс вы упомянули, что у вас есть методы, упомянутые во внешних библиотеках, более простой подход может заключаться в использовании Roslyn и генерации/запустить этот код на лету (см. http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.CSharp/Compilation/CSharpCompilation.cs для получения более подробной информации или поиска для него). Преимущество этого подхода состояло бы в том, что вы можете использовать большинство своих выражений, поскольку они без необходимости их преобразования.

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); 

Примечание: последний работает только если у вас есть более простые заявления, тогда как с бывшим можно оценить более сложная логика с ветвлением и т. д.

Если это не то, что вы действительно хотели узнать, не могли бы вы перефразировать свой вопрос и предоставить более подробную информацию?

 Смежные вопросы

  • Нет связанных вопросов^_^