解析字符串以产生谓词

时间:2013-05-31 13:22:53

标签: c# parsing expression

我需要解析一个字符串并生成一个谓词(或表达式,我不打扰),其中字符串采用以下形式:

“> 30”

我宁愿不写我自己的,有一些库做这样的东西 - 我尝试过FLEE和NCalc,但他们似乎要求字符串采用“a> 30”形式并提供值'a'作为一个参数。

是否有一个允许我编写类似

的库
Func<int, bool> predicate = parser.Parse("> 30");

bool a = predicate(10); // false
bool b = predicate(40); // true

我需要像&lt ;,&gt;,=等运算符,并支持OR和AND。而且这不仅仅是我正在使用的数字,字符串和枚举也在混合中。

1 个答案:

答案 0 :(得分:8)

您可以查看使用ScottGu博客的动态Linq库。

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

http://msdn.microsoft.com/en-US/vstudio/bb894665.aspx

如果应该让你做以下的事情。

const string exp = "variable > 30";
var p = Expression.Parameter(typeof(int), "variable");
var e = DynamicExpression.ParseLambda(new[] { p }, null, exp);


bool a = (bool)e.Compile().DynamicInvoke(20);
bool b = (bool)e.Compile().DynamicInvoke(40);

Func<int, bool> predicate = (Func<int, bool>)e.Compile();
bool a = predicate(20);
bool b = predicate(40);